PySide2 中加載ui文件的兩種方法比較

PySide2 中有兩種加載 .ui 文件的方法

生成 Python 類再加載

先將 QtDesigner 生成的.ui 文件轉(zhuǎn)換成 python 類,再在項(xiàng)目中導(dǎo)入這個(gè)類。

可以使用 pyside2-uic 這個(gè)工具來實(shí)現(xiàn) ui 文件轉(zhuǎn) python 類的操作,執(zhí)行以下命令即可:

    pyside2-uic mainwindow.ui -o ui_mainwindow.py

注意: PySide2 官網(wǎng)中的例子是使用管道將 pyside2-uic 的輸出結(jié)果直接寫入文件中,實(shí)測在 windows 下會有 bug, 會輸出不可見字符,導(dǎo)致程序無法運(yùn)行,所以還是建議使用 pyside2-uic 的 -o 參數(shù),輸出到文件中
之后可以在項(xiàng)目中直接導(dǎo)入生成的 python 類。

    from ui_mainwindow import Ui_MainWindow

現(xiàn)在開始使用它,我們要先創(chuàng)建一個(gè)自定義的類,并在類中使用生成的 ui 類
為了更好的理解,看下面的代碼

    import sys
    from PySide2.QtWidgets import QApplication, QMainWindow
    from PySide2.QtCore import QFile
    from ui_mainwindow import Ui_MainWindow

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

    if __name__ == "__main__":
        app = QApplication(sys.argv)

        window = MainWindow()
        window.show()

        sys.exit(app.exec_())

下面兩行負(fù)責(zé)從UI 文件加載生成的 Python 類

    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)

Note: 每次更改UI文件時(shí),都必須再次運(yùn)行 pyside2-uic

使用 QUiLoader 直接加載 .ui 文件

直接加載 ui 文件,我們需要使用 QtUiTool 模塊

    from PySide2.QtUiTool import QUiLoader

QUiLoader 使我們可以動態(tài)加載 ui 文件并立即使用它。

    ui_file = QFile("mainwindow.ui")
    ui_file.open(QFile.ReadOnly)

    loader = QUiLoader()
    window = loader.load(ui_file)
    window.show()

一個(gè)完整的示例是像這樣的:

    # main.py
    import sys
    from PySide2.QtUiTools import QUiLoader
    from PySide2.QtWidgets import QApplication
    from PySide2.QtCore import QFile, QIODevice

    if __name__ == "__main__":
        app = QApplication(sys.argv)

        ui_file_name = "mainwindow.ui"
        ui_file = QFile(ui_file_name)
        if not ui_file.open(QIODevice.ReadOnly):
            print("Cannot open {}: {}".format(ui_file_name, ui_file.errorString()))
            sys.exit(-1)
        loader = QUiLoader()
        window = loader.load(ui_file)
        ui_file.close()
        if not window:
            print(loader.errorString())
            sys.exit(-1)
        window.show()

        sys.exit(app.exec_())

我們只需要運(yùn)行下列命令來執(zhí)行它:

    python main.py
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。