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
相关产品推荐
相关产品推荐

