项目结构
在上一篇文章python之pyqt专栏1-环境搭建,创建新的pyqt项目,下面我们来看一下这个项目下的文件。
从下面的文件结构图可以看到,该项目下有3个文件,untitled.ui,untitled.py 以及main.py。
QtDesigner可以UI界面的方式,编辑UI界面,并且保存成untitled.ui,
pyuic 会将untitled.ui 转换为untitled.py,
当我们需要改变程序的界面时,我们只需要通过QtDesigner 修改Ui界面,再通过pyuic转为".py"文件即可,不需要修改pyuic转换的".py"文件
untitled.py
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again. Do not edit this file unless you know what you are doing.from PyQt6 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.resize(400, 300)self.pushButton = QtWidgets.QPushButton(parent=Form)self.pushButton.setGeometry(QtCore.QRect(150, 110, 75, 23))self.pushButton.setObjectName("pushButton")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Form"))self.pushButton.setText(_translate("Form", "PushButton"))if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)Form = QtWidgets.QWidget()ui = Ui_Form()ui.setupUi(Form)Form.show()sys.exit(app.exec())
untitled.py有一个Ui_Form类,这个类只有setupUi(self, Form) 与retranslateUi(self, Form),两个函数。
setupUi(self, Form) ,Form形参,用来传递对象。函数具体的语言则是执行一些界面的设置。
retranslateUi(self, Form)函数,只要是实现国际化用的,用于界面文字自动识别当前国家
if __name__ == "__main__":import sysapp = QtWidgets.QApplication(sys.argv)Form = QtWidgets.QWidget()ui = Ui_Form()ui.setupUi(Form)Form.show()sys.exit(app.exec())
if __name__ == "__main__"用途,Python文件可以被当作脚本直接运行,也可以被当作模块导入到其他Python文件中。当Python文件被当作脚本运行时,其顶层代码会被执行。但当它被当作模块导入时,其顶层代码也会被执行。
main.py
#导入sys模块
import sys
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget# untitled模块中导入Ui_Form类
from untitled import Ui_Formclass MyMainForm(QWidget,Ui_Form):def __init__(self,parent=None):#调用父类的构造函数super(MyMainForm, self).__init__(parent)#调用继承Ui_Form过来的setupUi函数self.setupUi(self)# Press the green button in the gutter to run the script.
if __name__ == '__main__':# 实例化应用app = QApplication(sys.argv)#实例化MyMainFormmyw = MyMainForm()#myw显示myw.show()#启动应用程序的事件循环并等待用户交互,直到应用程序关闭。sys.exit(app.exec())
自定义MyMainForm类
继承QWidget与Ui_Form,是多继承。在__init__(self,parent=None)构造函数中,调用父类的构造函数,由于Ui_Form构造函数,也不需要。因此只会调用QWidget构造函数。调用self.setupUi(self)则是MyMainForm实例进行样式进行设置
代码执行
app = QApplication(sys.argv),创建了QApplication实例,你可以继续添加各种GUI元素(如按钮,文本框,滑动条等),并将它们组织在窗口中。通常,一个Qt应用程序至少包含一个窗口(由QMainWindow或QWidget派生)。
myw = MyMainForm() 创建了MyMainForm类的一个实例,将会调用MyMainForm,__init__(self,parent=None)函数
myw.show() 用myw对象的show()方法。这个方法会让MyMainForm窗口在屏幕上显示出来。在窗口显示出来之后,用户就可以开始与窗口进行交互
sys.exit(app.exec()) 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。