2.1 常用窗口控件的使用
Qt Designer中,有三类常用的窗口控件:在Qt Designer中,可以根据需求通过选择新建Main Window、Widget和Dialog 来创建新窗口,同时也分别对应了PyQt5中的QMainWindow、QWidget和QDialog三个类。QmainWindow是一个为用户提供主窗口程序的类,主窗口通常包括菜单栏、工具栏、状态栏以及其他窗口组件,是应用程序的主要界面;Qwidget是所有窗口类的父类,可以内嵌到其它窗口的内部,也可以作为独立的窗口显示。Qdialog是Qwidget的子类,因此具有其所有功能,用于创建对话框窗口、与用户进行交互,如接受用户输入、显示消息、选择文件等。当需要创建一个独立的、自定义的用户界面小部件,而不是整个应用程序窗口时,通常使用Qwidget。QmainWindow通常用于创建完整的应用程序主窗口,它包含了一些常见的顶层窗口功能。
2.2 Qlabel标签控件
QLabel控件,标签控件,作为提示标记,通常用于在用户界面中显示静态文本或图像(可以将图像设置为标签的背景或图标属性),但不具备用户输入交互功能。
2.3 文本框类控件-单行文本控件QLineEdit
QLineEdit是比较常用的单行文本输入控件,它提供了一个可编辑的文本框,允许用户可以在其中输入和编辑单行文本。通常与QLabel标签控件配合使用。QLineEdit通常用于文件路径选择、命令行输入、URL输入框、搜索框、文本过滤器等,其常见的方法、属性、信号如下表所示。
import sys
import qdarkstyle
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QRegularExpression
from PyQt5.QtGui import QIntValidator, QDoubleValidator, QRegularExpressionValidator
from PyQt5.QtWidgets import QMainWindow, QLineEdit, QApplication
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow,self).__init__()
self.setupUi(self)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(500, 500)
MainWindow.setMinimumSize(QtCore.QSize(500, 500))
MainWindow.setMaximumSize(QtCore.QSize(500, 500))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("C:/Users/yanjiaxi/Pictures/微信截图_20220215133715.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.lineEdit_date = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_date.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_date.setObjectName("lineEdit_date")
self.lineEdit_date.setInputMask("0000-00-00")
self.gridLayout.addWidget(self.lineEdit_date, 10, 1, 1, 1)
self.lineEdit_IntValidator = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_IntValidator.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_IntValidator.setObjectName("lineEdit_IntValidator")
validator_int = QIntValidator(self)
validator_int.setRange(0, 1000) #设置范围
self.lineEdit_IntValidator.setValidator(validator_int)
self.gridLayout.addWidget(self.lineEdit_IntValidator, 4, 1, 1, 1)
self.label_PasswordEchoOnEdit = QtWidgets.QLabel(self.centralwidget)
self.label_PasswordEchoOnEdit.setMinimumSize(QtCore.QSize(200, 0))
self.label_PasswordEchoOnEdit.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_PasswordEchoOnEdit.setFont(font)
self.label_PasswordEchoOnEdit.setObjectName("label_PasswordEchoOnEdit")
self.gridLayout.addWidget(self.label_PasswordEchoOnEdit, 3, 0, 1, 1)
self.lineEdit_QDoubleValidator = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_QDoubleValidator.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_QDoubleValidator.setObjectName("lineEdit_QDoubleValidator")
validator_double = QDoubleValidator(self)
validator_double.setRange(-100, 100)
validator_double.setNotation(QDoubleValidator.Notation.StandardNotation)
validator_double.setDecimals(2)
self.lineEdit_QDoubleValidator.setValidator(validator_double)
self.gridLayout.addWidget(self.lineEdit_QDoubleValidator, 5, 1, 1, 1)
self.lineEdit_Password = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_Password.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_Password.setObjectName("lineEdit_Password")
self.lineEdit_Password.setEchoMode(QLineEdit.EchoMode.Password)
self.lineEdit_Password.setStyleSheet('lineedit-password-character: 42')
self.gridLayout.addWidget(self.lineEdit_Password, 2, 1, 1, 1)
self.lineEdit_ip = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_ip.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_ip.setObjectName("lineEdit_ip")
self.lineEdit_ip.setInputMask("000.000.000.000;_")
self.gridLayout.addWidget(self.lineEdit_ip, 8, 1, 1, 1)
self.label_mac = QtWidgets.QLabel(self.centralwidget)
self.label_mac.setMinimumSize(QtCore.QSize(200, 0))
self.label_mac.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_mac.setFont(font)
self.label_mac.setObjectName("label_mac")
self.gridLayout.addWidget(self.label_mac, 9, 0, 1, 1)
self.lineEdit_other = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_other.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_other.setObjectName("lineEdit_other")
self.lineEdit_other.setInputMask(">AAAA-AAAA-AAAA-AAAA-AAAA-AAAA;#")
self.gridLayout.addWidget(self.lineEdit_other, 11, 1, 1, 1)
self.lineEdit_QRegularExpression = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_QRegularExpression.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_QRegularExpression.setObjectName("lineEdit_QRegularExpression")
regexp = QRegularExpression("[a-zA-z0-9]+") # 创建正则表达式匹配项
validator_regx = QRegularExpressionValidator(self) # 创建校验器
validator_regx.setRegularExpression(regexp) # 设置校验器正则表达式
self.lineEdit_QRegularExpression.setValidator(validator_regx) # 设置校验器
self.gridLayout.addWidget(self.lineEdit_QRegularExpression, 6, 1, 1, 1)
self.label_NoEcho = QtWidgets.QLabel(self.centralwidget)
self.label_NoEcho.setMinimumSize(QtCore.QSize(200, 0))
self.label_NoEcho.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_NoEcho.setFont(font)
self.label_NoEcho.setObjectName("label_NoEcho")
self.gridLayout.addWidget(self.label_NoEcho, 1, 0, 1, 1)
self.lineEdit_phone = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_phone.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_phone.setObjectName("lineEdit_phone")
self.lineEdit_phone.setInputMask("999 9999 9999;0")
self.gridLayout.addWidget(self.lineEdit_phone, 7, 1, 1, 1)
self.label_IntValidator = QtWidgets.QLabel(self.centralwidget)
self.label_IntValidator.setMinimumSize(QtCore.QSize(200, 0))
self.label_IntValidator.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_IntValidator.setFont(font)
self.label_IntValidator.setObjectName("label_IntValidator")
self.gridLayout.addWidget(self.label_IntValidator, 4, 0, 1, 1)
self.label_phone = QtWidgets.QLabel(self.centralwidget)
self.label_phone.setMinimumSize(QtCore.QSize(200, 0))
self.label_phone.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_phone.setFont(font)
self.label_phone.setObjectName("label_phone")
self.gridLayout.addWidget(self.label_phone, 7, 0, 1, 1)
self.lineEdit_mac = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_mac.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_mac.setObjectName("lineEdit_mac")
self.lineEdit_mac.setInputMask("HH:HH:HH:HH:HH:HH;")
self.gridLayout.addWidget(self.lineEdit_mac, 9, 1, 1, 1)
self.label_Password = QtWidgets.QLabel(self.centralwidget)
self.label_Password.setMinimumSize(QtCore.QSize(200, 0))
self.label_Password.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_Password.setFont(font)
self.label_Password.setObjectName("label_Password")
self.gridLayout.addWidget(self.label_Password, 2, 0, 1, 1)
self.label_ip = QtWidgets.QLabel(self.centralwidget)
self.label_ip.setMinimumSize(QtCore.QSize(200, 0))
self.label_ip.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_ip.setFont(font)
self.label_ip.setObjectName("label_ip")
self.gridLayout.addWidget(self.label_ip, 8, 0, 1, 1)
self.label_QDoubleValidator = QtWidgets.QLabel(self.centralwidget)
self.label_QDoubleValidator.setMinimumSize(QtCore.QSize(200, 0))
self.label_QDoubleValidator.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_QDoubleValidator.setFont(font)
self.label_QDoubleValidator.setObjectName("label_QDoubleValidator")
self.gridLayout.addWidget(self.label_QDoubleValidator, 5, 0, 1, 1)
self.label_Normal = QtWidgets.QLabel(self.centralwidget)
self.label_Normal.setMinimumSize(QtCore.QSize(200, 0))
self.label_Normal.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_Normal.setFont(font)
self.label_Normal.setObjectName("label_Normal")
self.gridLayout.addWidget(self.label_Normal, 0, 0, 1, 1)
self.lineEdit_NoEcho = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_NoEcho.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_NoEcho.setObjectName("lineEdit_NoEcho")
self.lineEdit_NoEcho.setEchoMode(QLineEdit.EchoMode.NoEcho)
self.gridLayout.addWidget(self.lineEdit_NoEcho, 1, 1, 1, 1)
self.label_date = QtWidgets.QLabel(self.centralwidget)
self.label_date.setMinimumSize(QtCore.QSize(200, 0))
self.label_date.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_date.setFont(font)
self.label_date.setObjectName("label_date")
self.gridLayout.addWidget(self.label_date, 10, 0, 1, 1)
self.lineEdit_Normal = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_Normal.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_Normal.setObjectName("lineEdit_Normal")
self.gridLayout.addWidget(self.lineEdit_Normal, 0, 1, 1, 1)
self.label_other = QtWidgets.QLabel(self.centralwidget)
self.label_other.setMinimumSize(QtCore.QSize(200, 0))
self.label_other.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_other.setFont(font)
self.label_other.setObjectName("label_other")
self.gridLayout.addWidget(self.label_other, 11, 0, 1, 1)
self.label_QRegularExpression = QtWidgets.QLabel(self.centralwidget)
self.label_QRegularExpression.setMinimumSize(QtCore.QSize(200, 0))
self.label_QRegularExpression.setMaximumSize(QtCore.QSize(200, 16777215))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label_QRegularExpression.setFont(font)
self.label_QRegularExpression.setObjectName("label_QRegularExpression")
self.gridLayout.addWidget(self.label_QRegularExpression, 6, 0, 1, 1)
self.lineEdit_PasswordEchoOnEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_PasswordEchoOnEdit.setMaximumSize(QtCore.QSize(330, 330))
self.lineEdit_PasswordEchoOnEdit.setObjectName("lineEdit_PasswordEchoOnEdit")
self.lineEdit_PasswordEchoOnEdit.setEchoMode(QLineEdit.EchoMode.PasswordEchoOnEdit)
self.gridLayout.addWidget(self.lineEdit_PasswordEchoOnEdit, 3, 1, 1, 1)
self.verticalLayout.addLayout(self.gridLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "QLineEdit"))
self.label_PasswordEchoOnEdit.setText(_translate("MainWindow", "PasswordEchoOnEdit"))
self.label_mac.setText(_translate("MainWindow", "MAC地址"))
self.label_NoEcho.setText(_translate("MainWindow", "NoEcho"))
self.label_IntValidator.setText(_translate("MainWindow", "IntValidator"))
self.label_phone.setText(_translate("MainWindow", "电话号码"))
self.label_Password.setText(_translate("MainWindow", "Password"))
self.label_ip.setText(_translate("MainWindow", "IP地址"))
self.label_QDoubleValidator.setText(_translate("MainWindow", "QDoubleValidator"))
self.label_Normal.setText(_translate("MainWindow", "Normal"))
self.label_date.setText(_translate("MainWindow", "日期"))
self.label_other.setText(_translate("MainWindow", "其它"))
self.label_QRegularExpression.setText(_translate("MainWindow", "QRegularExpression"))
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Ui_MainWindow()
form.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())
form.show()
sys.exit(app.exec_())
总结
本小节,我们通过小案例帮大家认识和实践pyqt5中最基础的控件,单行文本输入控件、窗体控件、及标签控件。下期,我们继续,由入门到精通再到一步步实现一个机器学习GUI。