?項目結構
????????在上一篇文章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, 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(140, 130, 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"))
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()) 啟動應用程序的事件循環并等待用戶交互,直到應用程序關閉。
?
?