1. 程式人生 > 其它 >qt for python 動態載入ui檔案不生效的問題

qt for python 動態載入ui檔案不生效的問題

  近期想用qt+python寫一個工具,利用qt Creator新建工程(qt for python(ui file))

  選擇基類為QMainWindow,隨後直接執行該工程,顯示一個標題為python的空白視窗

  編輯ui檔案,放置一個pushbutton,儲存執行,仍然顯示空白視窗,程式碼如下,除了main開頭兩行其餘均為qt自動生成:

  

# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys

from PySide2.QtWidgets import
QApplication, QMainWindow from PySide2.QtCore import QFile, Qt from PySide2.QtUiTools import QUiLoader class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.load_ui() def load_ui(self): loader = QUiLoader() path = os.fspath(Path(__file__
).resolve().parent / "form.ui") ui_file = QFile(path) ui_file.open(QFile.ReadOnly) loader.load(ui_file, self) ui_file.close() if __name__ == "__main__": QApplication.setAttribute(Qt.AA_EnableHighDpiScaling) QApplication.setAttribute(Qt.AA_ShareOpenGLContexts) app
= QApplication([]) widget = MainWindow() widget.show() sys.exit(app.exec_())

  經過嘗試,將程式碼21行和30行分別修改為:

self.ui = loader.load(ui_file, self)

widget.ui.show()

  則程式碼執行正常,顯示預期結果

  分析程式碼,個人認為是由於變數loader是區域性變數導致的,思路是把ui檔案load到類MainWindow的變數ui中,儲存下來就可以正常show了。

  但是!如果新建一個基類為QWidget的工程,直接執行是可以正常顯示ui檔案設定的視窗的,選擇基類QMainWindow和QDialog都顯示空視窗,這就很奇怪了,看來是沒完全解決,在這裡求助各位。