文本类控件主要用来显示或者编辑文本信息,PyQt5中的文本类控件主要有LabelLineEditTextEditSpinBoxDoubleSpinBoxLCDNumber等,本节将对它们的常用方法及使用方式进行讲解。

1  Label:标签控件


Label控件,又称为标签控件,它主要用于显示用户不能编辑的文本,标识窗体上的对象(例如,给文本框、列表框添加描述信息等),它对应PyQt5中的QLabel类,Label控件在本质上是QLabel类的一个对象。

1)设置标签文本

可以通过两种方法设置标签控件(即Label控件)显示的文本:

  • 第一种是直接在Qt Designer设计器的属性编辑器中设置text属性;
  • 第二种是通过代码设置。

在Qt Designer设计器的属性编辑器中设置text属性的效果如图所示。

Pasted image 20250827164045

第二种方法是直接通过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属性,可以看到有两个值,分别为HorizontalVertical

Horizontal用来设置标签文本的水平对齐方式,取值有4个,如图所示,它们的说明如表所示。

取    值说    明
AlignLeft左对齐
AlignHCenter水平居中对齐
AlignRight右对齐
AlignJustify两端对齐

Pasted image 20250827182714

  • AlignLeft

Pasted image 20250827182900

  • AlignHCenter

Pasted image 20250827183451

  • AlignRight

Pasted image 20250827183529

Vertical用来设置标签文本的垂直对齐方式,取值有3个,如图所示,它们的说明如表所示。

取    值说    明
AlignTop顶部对齐
AlignVCenter垂直居中对齐
AlignBottom底部对齐

Pasted image 20250827183744

  • AlignTop

Pasted image 20250827183908

  • AlignVCenter

Pasted image 20250827183927

  • AlignBottom

Pasted image 20250827184008

使用代码设置Label标签文本的对齐方式,需要用到QLabel类的setAlignment()方法,例如,将标签文本的对齐方式设置为水平左对齐、垂直居中对齐,代码如下:

self.label.setAlignment(QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)

3)设置文本换行显示

假设将标签文本的text值设置为每天编程1小时,从菜鸟到大牛,在标签宽度不足的情况下,系统会默认只显示部分文字,如图所示;

Pasted image 20250827184432

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

Pasted image 20250827184549

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

Pasted image 20250827184602

使用代码设置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>标签中指定的网址。

Pasted image 20250827185613

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值修改为用户名:密码:,如图所示。

Pasted image 20250828100747

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_())         # 程序关闭时退出进程

运行程序,效果如图所示。

Pasted image 20250828101647

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文件添加程序入口,然后运行程序,效果如图所示。

Pasted image 20250828102841

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控件中实时显示数字选择控件中的数值,效果如图所示。

Pasted image 20250828104840

5  DoubleSpinBox:小数数字选择控件


DoubleSpinBoxSpinBox控件类似,区别是它用来选择小数数字,并且默认保留两位小数,它对应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控件中实时显示小数数字选择控件中的数值,效果如图所示。

Pasted image 20250828111145

6  LCDNumber:液晶数字显示控件

LCDNumber控件主要用来显示液晶数字。LCDNumber控件对应PyQt5中的QLCDNumber类,该类的常用方法及说明如表所示。

方    法说    明
setDigitCount()设置可以显示的数字数量
setProperty()设置相应属性的值
setMode()设置显示数字的模式,有以下4种模式:

◆ Bin:二进制

◆ Oct:八进制

◆ Dec:十进制

◆ Hex:十六进制
setSegmentStyle()设置显示样式,有以下3种样式:OutLine、Filled和Flat,它们的效果分别如图26、图27和图28所示
value()获取显示的数值
  • OutLine样式

Pasted image 20250828112756

  • Filled样式

Pasted image 20250828112706

  • Flat样式

Pasted image 20250828112614

实例 设置液晶显示屏中的数字显示

使用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位时,则会在液晶显示控件中以科学计数法的形式进行显示,如图所示。

  • 数字的正常显示

Pasted image 20250828112926

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

Pasted image 20250828113011