项目结构
在上一篇文章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
untitled.py有一个Ui_Form类,这个类只有setupUi(self, Form) 与retranslateUi(self, Form),两个函数。
setupUi(self, Form) ,Form形参,用来传递对象。函数具体的语言则是执行一些界面的设置。
retranslateUi(self, Form)函数,只要是实现国际化用的,用于界面文字自动识别当前国家
from PyQt6 import QtCore, QtGui, QtWidgets
class 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(140, 130, 75, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.pushButton.setText(_translate("Form", "PushButton"))
main.py
#导入sys模块
import sys
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget
# untitled模块中导入Ui_Form类
from untitled import Ui_Form
class 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)
#实例化MyMainForm
myw = 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()) 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。