文本类控件主要用来显示或者编辑文本信息,PyQt5中的文本类控件主要有Label、LineEdit、TextEdit、SpinBox、DoubleSpinBox、LCDNumber等,本节将对它们的常用方法及使用方式进行讲解。
1 Label:标签控件
Label控件,又称为标签控件,它主要用于显示用户不能编辑的文本,标识窗体上的对象(例如,给文本框、列表框添加描述信息等),它对应PyQt5中的QLabel类,Label控件在本质上是QLabel类的一个对象。
1)设置标签文本
可以通过两种方法设置标签控件(即Label控件)显示的文本:
- 第一种是直接在Qt Designer设计器的属性编辑器中设置
text属性; - 第二种是通过代码设置。
在Qt Designer设计器的属性编辑器中设置text属性的效果如图所示。

第二种方法是直接通过Python代码进行设置,需要用到QLabel类的setText()方法。
实例 Label标签控件的使用
将PyQt5窗口中的Label控件的文本设置为用户名:,代码如下:
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 30, 81, 41))
self.label.setText("用户名:")
Info: 说明 将
.ui文件转换为.py文件时,Lable控件所对应的类为QLabel,即在控件前面加了一个Q,表示它是Qt的控件,其他控件也是如此。
2)设置标签文本的对齐方式
PyQt5中支持设置标签中文本的对齐方式,主要用到alignment属性,在Qt Designer设计器的属性编辑器中展开alignment属性,可以看到有两个值,分别为Horizontal和Vertical。
Horizontal用来设置标签文本的水平对齐方式,取值有4个,如图所示,它们的说明如表所示。
| 取 值 | 说 明 |
|---|---|
| AlignLeft | 左对齐 |
| AlignHCenter | 水平居中对齐 |
| AlignRight | 右对齐 |
| AlignJustify | 两端对齐 |

AlignLeft

AlignHCenter

AlignRight

Vertical用来设置标签文本的垂直对齐方式,取值有3个,如图所示,它们的说明如表所示。
| 取 值 | 说 明 |
|---|---|
| AlignTop | 顶部对齐 |
| AlignVCenter | 垂直居中对齐 |
| AlignBottom | 底部对齐 |

AlignTop

AlignVCenter

AlignBottom

使用代码设置Label标签文本的对齐方式,需要用到QLabel类的setAlignment()方法,例如,将标签文本的对齐方式设置为水平左对齐、垂直居中对齐,代码如下:
self.label.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
3)设置文本换行显示
假设将标签文本的text值设置为每天编程1小时,从菜鸟到大牛,在标签宽度不足的情况下,系统会默认只显示部分文字,如图所示;

遇到这种情况时,可以设置标签中的文本换行显示,只需要在Qt Designer设计器的属性编辑器中,将wordWrap属性后面的复选框选中即可,如图所示;

换行显示后的效果如图所示。

使用代码设置Label标签文本换行显示,需要用到QLabel类的setWordWrap()方法,代码如下:
self.label.setWordWrap(True)
4)为标签设置超链接
为Label标签设置超链接时,可以直接在QLabel类的setText()方法中使用HTML中的<a>标签设置超链接文本,然后将Label标签中的setOpenExternalLinks()方法设置为True,以便允许访问超链接,代码如下:
self.label.setText("<a href='https://www.csdn.net'>CSDN官网</a>")
self.label.setOpenExternalLinks(True) # 设置允许访问超链接
运行效果如图所示,当单击CSDN官网时,即可使用浏览器打开<a>标签中指定的网址。

5)为标签设置图片
为Label标签设置图片时,需要使用QLabel类的setPixmap()方法,该方法中需要有一个QPixmap对象,表示图标对象,代码如下:
from PyQt5.QtGui import QPixmap # 导入QPixmap类
self.label.setPixmap(QPixmap('test.png')) # 为Label设置图片
6)获取标签文本
获取Label标签中的文本需要使用QLabel类的text()方法,例如,在控制台中打印Label中的文本,代码如下:
print(self.label.text())
2 LineEdit:单行文本框
LineEdit是单行文本框,该控件只能输入单行字符串。LineEdit控件对应PyQt5中的QLineEdit类,该类的常用方法及说明如表所示。
| 方 法 | 说 明 |
|---|---|
| setText() | 设置文本框内容 |
| text() | 获取文本框内容 |
| setPlaceholderText() | 设置文本框浮现文字 |
| setMaxLength() | 设置允许文本框内输入字符的最大长度 |
| setAlignment() | 设置文本对齐方式 |
| setReadOnly() | 设置文本框只读 |
| setFocus() | 使文本框得到焦点 |
| setEchoMode() | 设置文本框显示字符的模式,有以下4种模式: ◆ QLineEdit.Normal:正常显示输入的字符,这是默认设置◆ QLineEdit.NoEcho:不显示任何输入的字符,适用于即使符合密码长度也需要保密的密码◆ QLineEdit.Password:显示与平台相关的密码掩码字符,而不是实际输入的字符◆ QLineEdit.PasswordEchoOnEdit:在编辑时显示字符,失去焦点后显示密码掩码字符 |
| setValidator() | 设置文本框验证器,有以下3种模式: ◆ QIntValidator:限制输入整数◆ QDoubleValidator:限制输入小数◆ QRegExpValidator:检查输入是否符合设置的正则表达式 |
| setInputMask() | 设置掩码,掩码通常由掩码字符和分隔符组成,后面可以跟一个分号和空白字符,空白字符在编辑完成后会从文本框中删除,常用的掩码有以下几种形式: ◆ 日期掩码:0000-00-00 ◆ 时间掩码:00:00:00 ◆ 序列号掩码:>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# |
| clear() | 清除文本框内容 |
QLineEdit类的常用信号及说明如表所示。
| 信 号 | 说 明 |
|---|---|
| textChanged | 当更改文本框中的内容时发射该信号 |
| editingFinished | 当文本框中的内容编辑结束时发射该信号,以按下 |
实例 包括用户名和密码的登录窗口
使用LineEdit控件,并结合Label控件制作一个简单的登录窗口,其中包含用户名和密码输入框,密码要求是8位数字,并且以掩码形式显示,步骤如下:
1)打开Qt Designer设计器,根据需求,从工具箱中向主窗口中放入两个Label控件与两个LineEdit控件,然后分别将两个Label控件的text值修改为用户名:和密码:,如图所示。

2)设计完成后,保存为.ui文件,使用Pyuic工具将其转换为.py文件,并在表示密码的LineEdit文本框下面使用setEchoMode()方法将其设置为密码文本,同时使用setValidator()方法为其设置验证器,控制只能输入8位数字,代码如下:
# 设置文本框为密码
self.lineEdit_2.setEchoMode(QtWidgets.QLineEdit.Password)
# 设置只能输入8位数字
self.lineEdit_2.setValidator(QtGui.QIntValidator(10000000, 99999999))
3)为.py文件添加程序入口,代码如下:
import sys
# 程序入口,程序从此处启动PyQt设计的窗体
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
ui = Ui_MainWindow() # 创建PyQt设计的窗体对象
ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
MainWindow.show() # 显示窗体
sys.exit(app.exec_()) # 程序关闭时退出进程
运行程序,效果如图所示。

Info: 说明 当在密码文本框中输入字母或者超过8位数字时,系统将自动控制其输入,文本框中不会显示任何内容。
Tip: 多学两招
textChanged信号在一些要求输入值时实时执行操作的场景下经常使用,比如上网购物时,更改购买的商品数量或者价格,总价格都会实时变化,如果用PyQt5设计类似这样的功能,就可以通过LineEdit控件中的textChanged信号实现。
3 TextEdit:多行文本框
TextEdit是多行文本框控件,主要用来显示多行的文本内容,当文本内容超出控件的显示范围时,该控件将显示垂直滚动条;另外,TextEdit控件不仅可以显示纯文本内容,还支持显示HTML网页。
TextEdit控件对应PyQt5中的QTextEdit类,该类的常用方法及说明如表所示。
| 方 法 | 说 明 |
|---|---|
| setPlainText() | 设置文本内容 |
| toPlainText() | 获取文本内容 |
| setTextColor() | 设置文本颜色,例如,将文本设置为红色,可以将该方法的参数设置为 QtGui.QColor(255,0,0) |
| setTextBackgroundColor() | 设置文本的背景颜色,颜色参数与setTextColor()相同 |
| setHtml() | 设置HTML文档内容 |
| toHtml() | 获取HTML文档内容 |
| setWordWrapMode() | 设置自动换行 |
| clear() | 清除所有内容 |
实例 设置多行文本和HTML文本的对比显示
使用Qt Designer设计器创建一个MainWindow窗口,其中添加两个TextEdit控件,然后保存为.ui文件,使用Pyuic工具将.ui文件转换为.py文件,然后分别使用setPlainText()方法和setHtml()方法为两个TextEdit控件设置要显示的文本内容,代码如下:
# 设置纯文本显示
self.textEdit.setPlainText("与失败比起来,我对乏味和平庸的恐惧要严重得多。对我而言,很好的事要比糟糕的事好,而糟糕的事要比平庸的事好,因为糟糕的事至少给生活增加了滋味。")
# 设置HTML文本显示
self.textEdit_2.setHtml("与失败比起来,我对乏味和平庸的恐惧要严重得多。对我而言,<font color='red' size=12>很好的事要比糟糕的事好,而糟糕的事要比平庸的事好,</font>因为糟糕的事至少给生活增加了滋味。")
为.py文件添加程序入口,然后运行程序,效果如图所示。

4 SpinBox:整数数字选择控件
SpinBox是一个整数数字选择控件,该控件提供了一对上下箭头,用户可以单击上下箭头选择数值,也可以直接输入。如果输入的数值大于设置的最大值,或者小于设置的最小值,SpinBox将不会接受输入。
SpinBox控件对应PyQt5中的QSpinBox类,该类的常用方法及说明如表所示。
| 方 法 | 说 明 |
|---|---|
| setValue() | 设置控件的当前值 |
| setMaximum() | 设置最大值 |
| setMinimum() | 设置最小值 |
| setRange() | 设置取值范围(包括最大值和最小值) |
| setSingleStep() | 单击上下箭头时的步长值 |
| value() | 获取控件中的值 |
Info: 说明 在默认情况下,
SpinBox控件的取值范围为0~99,步长值为1。
在单击SpinBox控件的上下箭头时,可以通过发射valueChanged信号,获取控件中的当前值。
实例 获取SpinBox中选择的数字
使用Qt Designer设计器创建一个MainWindow窗口,其中添加两个Label控件和一个SpinBox控件,然后保存为.ui文件,使用Pyuic工具将.ui文件转换为.py文件,在转换后的.py文件中,分别设置数字选择控件的最小值、最大值和步长值。关于SpinBox控件的关键代码如下:
self.spinBox = QtWidgets.QSpinBox(self.centralwidget)
self.spinBox.setGeometry(QtCore.QRect(100, 70, 221, 41))
self.spinBox.setObjectName("spinBox")
self.spinBox.setMinimum(0) # 设置最小值
self.spinBox.setMaximum(100) # 设置最大值
self.spinBox.setSingleStep(2) # 设置步长值
Tip: 多学两招 在上面代码中的第4行和第5行代码分别用来设置最小值和最大值,它们还可以使用
setRange()方法代替,代码如下:self.spinBox.setRange(0, 100)
自定义一个getvalue()方法,使用value()方法获取SpinBox控件中的当前值,并显示在Label控件中,代码如下:
# 获取SpinBox的当前值,并显示在Label中
def getvalue(self):
self.label_2.setText(str(self.spinBox.value()))
将SpinBox控件的valueChanged信号与自定义的getvalue()槽函数相关联,代码如下:
# 将valueChanged信号与自定义槽函数相关联
self.spinBox.valueChanged.connect(self.getvalue)
为.py文件添加程序入口,然后运行程序,单击数字选择控件的上下箭头时,在Label控件中实时显示数字选择控件中的数值,效果如图所示。

5 DoubleSpinBox:小数数字选择控件
DoubleSpinBox与SpinBox控件类似,区别是它用来选择小数数字,并且默认保留两位小数,它对应PyQt5中的QDoubleSpinBox类。
DoubleSpinBox控件的使用方法与SpinBox控件类似,但由于它处理的是小数数字,因此该控件提供了一个setDecimals()方法,用来设置小数的位数。
实例 设置DoubleSpinBox中的小数位数并获取选择的数字
使用Qt Designer设计器创建一个MainWindow窗口,其中添加两个Label控件和一个DoubleSpinBox控件,然后保存为.ui文件,使用Pyuic工具将.ui文件转换为.py文件,在转换后的.py文件中,分别设置小数数字选择控件的最小值、最大值、步长值,以及保留3位小数。有关DoubleSpinBox控件的关键代码如下:
self.doubleSpinBox = QtWidgets.QDoubleSpinBox(self.centralwidget)
self.doubleSpinBox.setGeometry(QtCore.QRect(90, 60, 211, 51))
self.doubleSpinBox.setObjectName("doubleSpinBox")
self.doubleSpinBox.setMinimum(0) # 设置最小值
self.doubleSpinBox.setMaximum(99.999) # 设置最大值
self.doubleSpinBox.setSingleStep(0.001) # 设置步长值
self.doubleSpinBox.setDecimals(3) # 设置保留3位小数
自定义一个getvalue()方法,使用value()方法获取DoubleSpinBox控件中的当前值,并显示在Label控件中,代码如下:
# 获取DoubleSpinBox的当前值,并显示在Label中
def getvalue(self):
self.label_2.setText(str(self.doubleSpinBox.value()))
将DoubleSpinBox控件的valueChanged信号与自定义的getvalue()槽函数相关联,代码如下:
# 将valueChanged信号与自定义槽函数相关联
self.doubleSpinBox.valueChanged.connect(self.getvalue)
为.py文件添加程序入口,然后运行程序,单击小数数字选择控件的上下箭头时,在Label控件中实时显示小数数字选择控件中的数值,效果如图所示。

6 LCDNumber:液晶数字显示控件
LCDNumber控件主要用来显示液晶数字。LCDNumber控件对应PyQt5中的QLCDNumber类,该类的常用方法及说明如表所示。
| 方 法 | 说 明 |
|---|---|
| setDigitCount() | 设置可以显示的数字数量 |
| setProperty() | 设置相应属性的值 |
| setMode() | 设置显示数字的模式,有以下4种模式: ◆ Bin:二进制 ◆ Oct:八进制 ◆ Dec:十进制 ◆ Hex:十六进制 |
| setSegmentStyle() | 设置显示样式,有以下3种样式:OutLine、Filled和Flat,它们的效果分别如图26、图27和图28所示 |
| value() | 获取显示的数值 |
OutLine样式

Filled样式

Flat样式

实例 设置液晶显示屏中的数字显示
使用Qt Designer设计器创建一个MainWindow窗口,其中添加一个Label控件、一个LineEdit控件和一个LCDNumber控件。其中,LineEdit控件用来输入数字;LCDNumber控件用来显示LineEdit控件中的数字,将设计完成的窗口保存为.ui文件,使用Pyuic工具将.ui文件转换为.py文件,在转换后的.py文件中,设置LCDNumber液晶显示控件的最大显示数字位数、显示样式及模式。有关LCDNumber控件的关键代码如下:
self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(40, 110, 311, 101))
# 设置最大显示7位数字
self.lcdNumber.setDigitCount(7)
# 设置默认以十进制显示数字
self.lcdNumber.setMode(QtWidgets.QLCDNumber.Dec)
# 设置数字显示屏的显示样式
self.lcdNumber.setSegmentStyle(QtWidgets.QLCDNumber.Flat)
self.lcdNumber.setObjectName("lcdNumber")
自定义一个setvalue()方法,使用setProperty()方法为LCDNumber控件设置要显示的数字为LineEdit文本框中输入的数字,代码如下:
# 自定义槽函数,用来在液晶显示屏中显示文本框中的数字
def setvalue(self):
self.lcdNumber.setProperty("value", self.lineEdit.text())
将LineEdit控件的editingFinished信号与自定义的setvalue()槽函数相关联,以便在文本框编辑结束后执行槽函数中定义的操作,代码如下:
# 文本框编辑结束时,发射editingFinished信号,与自定义槽函数关联
self.lineEdit.editingFinished.connect(self.setvalue)
为.py文件添加程序入口,然后运行程序,在文本框中输入数字,按下Enter键,即可将输入的数字显示在液晶显示控件中;但当文本框中输入的数字大于7位时,则会在液晶显示控件中以科学计数法的形式进行显示,如图所示。
- 数字的正常显示

- 大于7位时以科学计数法形式显示
