1、打開PySide6的UI設計工具pyside6-designer,設計一個主窗口,保存文件名為testwindow.ui
2、使用PySide6的RCC工具把testwindow.ui文件轉換為testwindow_rc.py文件,此文件中有一個類Ui_MainWindow(包含各種控件對象)
一、通過類繼承實現:
# 導入標準庫sys
import sys
# 導入PySide6庫中的兩個類:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導入使用PySide6-Rcc工具轉換的UI設計窗口Ui_MainWindow類
from testwindow_rc import Ui_MainWindow# 應用程序
class TestMainWindow(QMainWindow, Ui_MainWindow):def __init__(self):super(TestMainWindow, self).__init__()self.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.show()sys.exit(app.exec())
class TestMainWindow(QMainWindow, Ui_MainWindow): 定義了一個新的類TestMainWindow,它繼承自 QMainWindow(PySide6.QtWidget中的QtMainWindow類) 和 Ui_MainWindow。
在這種多重繼承的情況下,QMainWindow 是 PySide6中提供的一個主窗口類,它包含了很多創建和管理主窗口的功能。而 Ui_MainWindow 是由 PySide6 Designer 生成的一個界面類,它包含了在設計器中設計的窗口界面及其上的所有元素和布局。
TestMainWindow 類通過繼承這兩個類,同時獲得 QMainWindow 的窗口管理功能和 Ui_MainWindow 的界面元素。
調用執行self.setupUi(self) :其實是調用Ui_MainWindow中的setupUi()方法,傳入實參self是TestMainWindow類的實例對象,從而實現設計的窗口界面及其上元素(控件)的初始化完成布局。
通過上面的分離,以后修改Ui文件進行界面元素添加和修改屬性等,然后轉化Ui文件,將不影響邏輯代碼。
另外,定義和設計方法來控制窗口及其上控件的行為,響應用戶的操作等。要在TestMainWindow類的 __init__(self) 及其它方法中完成,這樣不會因為修改ui文件及轉化而被覆蓋。
super(TestMainWindow, self).__init__(),是 Python 中用于調用父類構造方法的一種寫法。在這里,TestMainWindow 是子類,而 self 是子類的實例。super() 函數是用來臨時改變當前類的父類,并返回一個父類的實例。因此,super(TestMainWindow, self) 返回的就是 TestMainWindow 的父類的一個實例,然后調用其 __init__() 方法,即初始化方法。
這樣做的目的是在子類的 __init__() 方法中,首先執行父類的 __init__() 方法,以便能夠繼承父類的屬性和方法。這是一種常見的在面向對象編程中實現繼承的方式。
在 Python 3 中,可以直接在子類中使用 super().__init__(),Python 會自動解析當前類和 self,不需要顯式地傳入。
二、關聯界面類來實現
# 導入標準庫sys
import sys
# 導入PySide6庫中的兩個類:QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導入使用PySide6-Rcc工具轉換的UI設計窗口Ui_MainWindow類
from testwindow_rc import Ui_MainWindow# 創建的類繼承PySide6的主窗口類QMainWindow
class TestMainWindow(QMainWindow):def __init__(self):# 執行父類QMainWindow的構造函數,從而讓子類TestMainWindow的實例對象# 具有父類的功能和屬性super().__init__()# 創建Ui界面類實例,并賦值給TestMainWindow的實例對象屬性uiself.ui = Ui_MainWindow()# 調用TestMainWindow的實例對象屬性ui的setupUi()方法# 傳入實參self是TestMainWindow的實例對象,從而實現Ui界面元素的創建self.ui.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.show()sys.exit(app.exec())
三、直接載入Ui文件
import sys
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoader
# 導入PySide6庫中的兩個類:QApplication
from PySide6.QtWidgets import QApplication
class TestMainWindow:def __init__(self):super(TestMainWindow, self).__init__()# 從ui文件中加載UI定義qfile = QFile("testwindow.ui")qfile.open(QFile.ReadOnly)qfile.close()# 從UI定義中動態創建一個相應的窗口對象self.ui = QUiLoader().load(qfile)if not self.ui:print(QUiLoader().errorString())sys.exit(-1)if __name__ == '__main__':app = QApplication(sys.argv)win = TestMainWindow()win.ui.show()sys.exit(app.exec())
筆者建議使用第一種方法,通過繼承方式。