PySide6中QUiLoader需先于QApplication初始化?是否为Bug?
PySide6中QUiLoader与QApplication初始化顺序异常问题
我发现PySide6的实际运行逻辑和网上文档、教程以及常规工作流程相悖:必须先实例化QUiLoader,再初始化QApplication,程序才能正常运行。目前不确定这是Bug还是新的实现逻辑,且了解到已有其他开发者提出过该问题,但尚未得到明确解释。由于即将启动一个规模较大的PySide6项目,需要明确该情况,避免编写大量不必要的适配代码。
无法正常运行的标准教程代码
直接取自PySide6在线教程的代码运行时,命令行窗口会冻结且无法响应中断:
import sys from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication from PySide6.QtCore import QFile, QIODevice if __name__ == "__main__": app = QApplication(sys.argv) ui_file_name = "tester.ui" ui_file = QFile(ui_file_name) if not ui_file.open(QIODevice.ReadOnly): print(f"Cannot open {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())
可正常运行的调整后代码
将QUiLoader的初始化移至QApplication之前,代码即可正常运行:
import sys from PySide6.QtUiTools import QUiLoader from PySide6.QtWidgets import QApplication from PySide6.QtCore import QFile, QIODevice if __name__ == "__main__": loader = QUiLoader() app = QApplication(sys.argv) ui_file_name = "tester.ui" ui_file = QFile(ui_file_name) if not ui_file.open(QIODevice.ReadOnly): print(f"Cannot open {ui_file_name}: {ui_file.errorString()}") sys.exit(-1) window = loader.load(ui_file) ui_file.close() if not window: print(loader.errorString()) sys.exit(-1) window.show() sys.exit(app.exec())
内容的提问来源于stack exchange,提问作者Simon T
相关产品推荐
相关产品推荐

