1、打開(kāi)PySide6的UI設(shè)計(jì)工具pyside6-designer,設(shè)計(jì)一個(gè)主窗口,保存文件名為testwindow.ui
2、使用PySide6的RCC工具把testwindow.ui文件轉(zhuǎn)換為testwindow_rc.py文件,此文件中有一個(gè)類(lèi)Ui_MainWindow(包含各種控件對(duì)象)
一、通過(guò)類(lèi)繼承實(shí)現(xiàn):
# 導(dǎo)入標(biāo)準(zhǔn)庫(kù)sys
import sys
# 導(dǎo)入PySide6庫(kù)中的兩個(gè)類(lèi):QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導(dǎo)入使用PySide6-Rcc工具轉(zhuǎn)換的UI設(shè)計(jì)窗口Ui_MainWindow類(lèi)
from testwindow_rc import Ui_MainWindow
# 應(yīng)用程序
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): 定義了一個(gè)新的類(lèi)TestMainWindow,它繼承自 QMainWindow(PySide6.QtWidget中的QtMainWindow類(lèi)) 和 Ui_MainWindow。
在這種多重繼承的情況下,QMainWindow 是 PySide6中提供的一個(gè)主窗口類(lèi),它包含了很多創(chuàng)建和管理主窗口的功能。而 Ui_MainWindow 是由 PySide6 Designer 生成的一個(gè)界面類(lèi),它包含了在設(shè)計(jì)器中設(shè)計(jì)的窗口界面及其上的所有元素和布局。
TestMainWindow 類(lèi)通過(guò)繼承這兩個(gè)類(lèi),同時(shí)獲得 QMainWindow 的窗口管理功能和 Ui_MainWindow 的界面元素。
調(diào)用執(zhí)行self.setupUi(self) :其實(shí)是調(diào)用Ui_MainWindow中的setupUi()方法,傳入實(shí)參self是TestMainWindow類(lèi)的實(shí)例對(duì)象,從而實(shí)現(xiàn)設(shè)計(jì)的窗口界面及其上元素(控件)的初始化完成布局。
通過(guò)上面的分離,以后修改Ui文件進(jìn)行界面元素添加和修改屬性等,然后轉(zhuǎn)化Ui文件,將不影響邏輯代碼。
另外,定義和設(shè)計(jì)方法來(lái)控制窗口及其上控件的行為,響應(yīng)用戶(hù)的操作等。要在TestMainWindow類(lèi)的 __init__(self) 及其它方法中完成,這樣不會(huì)因?yàn)樾薷膗i文件及轉(zhuǎn)化而被覆蓋。
super(TestMainWindow, self).__init__(),是 Python 中用于調(diào)用父類(lèi)構(gòu)造方法的一種寫(xiě)法。在這里,TestMainWindow 是子類(lèi),而 self 是子類(lèi)的實(shí)例。super() 函數(shù)是用來(lái)臨時(shí)改變當(dāng)前類(lèi)的父類(lèi),并返回一個(gè)父類(lèi)的實(shí)例。因此,super(TestMainWindow, self) 返回的就是 TestMainWindow 的父類(lèi)的一個(gè)實(shí)例,然后調(diào)用其 __init__() 方法,即初始化方法。
這樣做的目的是在子類(lèi)的 __init__() 方法中,首先執(zhí)行父類(lèi)的 __init__() 方法,以便能夠繼承父類(lèi)的屬性和方法。這是一種常見(jiàn)的在面向?qū)ο缶幊讨袑?shí)現(xiàn)繼承的方式。
在 Python 3 中,可以直接在子類(lèi)中使用 super().__init__(),Python 會(huì)自動(dòng)解析當(dāng)前類(lèi)和 self,不需要顯式地傳入。
二、關(guān)聯(lián)界面類(lèi)來(lái)實(shí)現(xiàn)
# 導(dǎo)入標(biāo)準(zhǔn)庫(kù)sys
import sys
# 導(dǎo)入PySide6庫(kù)中的兩個(gè)類(lèi):QApplication, QMainWindow
from PySide6.QtWidgets import QApplication, QMainWindow
# 導(dǎo)入使用PySide6-Rcc工具轉(zhuǎn)換的UI設(shè)計(jì)窗口Ui_MainWindow類(lèi)
from testwindow_rc import Ui_MainWindow
# 創(chuàng)建的類(lèi)繼承PySide6的主窗口類(lèi)QMainWindow
class TestMainWindow(QMainWindow):
def __init__(self):
# 執(zhí)行父類(lèi)QMainWindow的構(gòu)造函數(shù),從而讓子類(lèi)TestMainWindow的實(shí)例對(duì)象
# 具有父類(lèi)的功能和屬性
super().__init__()
# 創(chuàng)建Ui界面類(lèi)實(shí)例,并賦值給TestMainWindow的實(shí)例對(duì)象屬性u(píng)i
self.ui = Ui_MainWindow()
# 調(diào)用TestMainWindow的實(shí)例對(duì)象屬性u(píng)i的setupUi()方法
# 傳入實(shí)參self是TestMainWindow的實(shí)例對(duì)象,從而實(shí)現(xiàn)Ui界面元素的創(chuàng)建
self.ui.setupUi(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = TestMainWindow()
win.show()
sys.exit(app.exec())
三、直接載入U(xiǎn)i文件文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-853202.html
import sys
from PySide6.QtCore import QFile
from PySide6.QtUiTools import QUiLoader
# 導(dǎo)入PySide6庫(kù)中的兩個(gè)類(lèi):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定義中動(dòng)態(tài)創(chuàng)建一個(gè)相應(yīng)的窗口對(duì)象
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())
筆者建議使用第一種方法,通過(guò)繼承方式。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-853202.html
到了這里,關(guān)于Python學(xué)習(xí)筆記——PySide6設(shè)計(jì)GUI應(yīng)用之UI與邏輯分離的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!