[PySide6]介面與邏輯


Posted by Yen on 2024-01-07

上一篇文章講了如何生成.ui文件,並將.ui檔案轉換成.py檔。這時要注意的是,由於.py檔是由.ui檔的內容生成的,所以當我們的GUI介面發生更動,那.ui檔的內容也會更改,如此一來,由.ui檔生成的.py檔也會變動,這裡我們將由.ui檔生成的.py檔稱作介面程式。由於介面程式每次都會初始化,因此我們需要寫一個.py檔案去呼叫介面程式,這個呼叫用的就叫做邏輯程式,這樣介面與邏輯就會分成兩個不同的檔案,如此便可以達成介面與邏輯的分離。

要分離邏輯程式很簡單,首先創建一個first_main_win_run.py檔,並繼承介面檔案的主視窗類別就好。

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setGeometry(QRect(190, 110, 191, 121))
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QMenuBar(MainWindow)
        self.menubar.setObjectName(u"menubar")
        self.menubar.setGeometry(QRect(0, 0, 800, 21))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QStatusBar(MainWindow)
        self.statusbar.setObjectName(u"statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"PushButton", None))
    # retranslateUi

這是從上一篇文章的.ui檔生成的介面程式,接著我們用這個介面程式來寫邏輯程式。

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from first_main_win import *

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    main_win = MainWindow()
    main_win.show()
    sys.exit(app.exec())

這是邏輯程式的內容,可以看到邏輯程式只是繼承Ui_MainWindow,並呼叫setupUi方法而已。如此一來,當介面檔重新生成後,邏輯程式就可以使用新的介面程式來使用它。


#Python #gui #pyside







Related Posts

[BE201] Express & Sequelize part 4

[BE201] Express & Sequelize part 4

css selector 自己看

css selector 自己看

[進階 js 02]  賦值

[進階 js 02] 賦值


Comments