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

PySide6 QWidget调用super().__init__()时崩溃的问题求助

PySide6 QWidget调用super().init()时崩溃的问题求助

嘿,这个问题我太熟了!你代码里的崩溃完全是因为Qt GUI组件的初始化顺序搞反了。

Qt有个铁规则:必须先创建QApplication实例,再去实例化任何GUI控件。你现在的代码是先创建了MockParent(它继承自QWidget,属于GUI控件),之后才初始化QApplication,这直接违反了Qt的底层要求——Qt的GUI控件依赖QApplication先初始化好底层的事件循环、窗口环境等基础结构,没创建QApplication就搞控件,自然会触发底层库的崩溃,也就是你看到的exit code -1073740791 (0xC0000409)(这个错误码在Windows下通常和初始化顺序错误、底层资源未就绪有关)。

给你修正后的代码,只需要调整两行的顺序:

from PySide6 import QtWidgets

class MockParent(QtWidgets.QWidget):
    def __init__(self, /):
        try:
            super().__init__()
        except Exception as e:
            print(e)

if __name__ == '__main__':
    # 第一步:先初始化QApplication,这是Qt GUI程序的必要前提
    app: QtWidgets.QApplication = QtWidgets.QApplication([])
    # 第二步:再创建QWidget子类的实例
    parent = MockParent()
    parent.show()  # 可选,加上这句能让窗口显示出来,不然你看不到界面
    app.exec()

再补充几个关键点帮你理解:

  • 你之前担心的super().__init__()传参问题其实没问题,不传参数默认就是parent=None,完全符合文档要求,崩溃和这个无关。
  • 不管是直接用QWidget还是自定义子类,只要是可视化的GUI组件,都必须等QApplication创建好再实例化,这是Qt跨平台GUI框架的核心要求之一。
  • 那个try-except块其实抓不到这种底层崩溃,因为它是C++层面的异常,Python的try-except没法捕获,所以你之前的print(e)根本不会执行。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:08:07