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