PyQt4 诡异的程序崩溃,QGraphicsScene.addWidgetfrom __future__ import absolute_importimport sysfrom P
PyQt4 诡异的程序崩溃,QGraphicsScene.addWidget
from __future__ import absolute_import
import sys
from PyQt4.QtGui import QApplication, QGraphicsScene, QWidget, QMainWindow
class MainWindow(QMainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
self._scene = QGraphicsScene()
self._scene.addWidget(QWidget()) #这句代码去掉就一切正常
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
if __name__ == '__main__':
main()
可是下面这样写又没问题了...
from __future__ import absolute_import
import sys
from PyQt4.QtGui import QApplication, QGraphicsScene, QWidget, QMainWindow
class MainWindow(QMainWindow):
def __init__(self, parent = None):
super(MainWindow, self).__init__(parent)
self._scene = QGraphicsScene()
self._scene.addWidget(QWidget())
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()
程序退出后,python.exe 崩溃了,崩溃时的调用堆栈如下:
>ntdll.dll!772115de()未知
[下面的框架可能不正确和/或缺失,没有为 ntdll.dll 加载符号]
QtGui.pyd!6039ac32()未知
QtGui.pyd!603a8038()未知
QtGui4.dll!5fce899a()未知
QtGui4.dll!5fce9a4d()未知
QtGui4.dll!5fcf2c34()未知
QtGui4.dll!5fcf6c2b()未知
QtCore4.dll!5f613efc()未知
QtGui.pyd!6015e10b()未知
QtGui.pyd!60164cb8()未知
QtGui.pyd!600ec4c2()未知
QtGui.pyd!60256c33()未知
sip.pyd!6843333c()未知
sip.pyd!68434dba()未知
python27.dll!1e0bcbf6()未知
python27.dll!1e08ea7a()未知
sip.pyd!684330b7()未知
sip.pyd!68434c9d()未知
sip.pyd!68434dc0()未知
python27.dll!1e0bcbf6()未知
python27.dll!1e09c0de()未知
python27.dll!1e0ef615()未知
python27.dll!1e0ead32()未知
python27.dll!1e0ec257()未知
python27.dll!1e0ee602()未知
python27.dll!1e0ef5f5()未知
python27.dll!1e0f0b4b()未知
python27.dll!1e1152da()未知
python27.dll!1e116415()未知
python27.dll!1e1169b0()未知
python27.dll!1e117329()未知
python27.dll!1e038bb5()未知
python.exe!1d00116d()未知
kernel32.dll!752133aa()未知
ntdll.dll!77229ef2()未知
ntdll.dll!77229ec5()未知
[解决办法]
这个我试了下 应该不是qt的bug
不知道你用的qt是什么版本的
我猜是sip为了统一qt和python,对qt的语法做了些改进
导致在不同的栈帧上有不同的操作
你尽量写在__main__里吧,不要按PEP另外起一个main()函数了