You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:42:37