首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

PyQt4 诡谲的程序崩溃,QGraphicsScene.addWidget

2013-07-01 
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()未知


[解决办法]

引用:
Quote: 引用:

貌似这里不是QGraphicsScene的异常吧
这个应该是退出时,在app退出释放资源时的异常
我猜测由于app不是位于最顶层的函数调用堆栈,因此QAapplication做了些额外的资源释放 导致崩溃
在mac下试了试
也的确看到的是在对应的Qt对象的析构里的异常


估计是qt或者其他底层库的bug


这个我试了下 应该不是qt的bug 
不知道你用的qt是什么版本的
我猜是sip为了统一qt和python,对qt的语法做了些改进
导致在不同的栈帧上有不同的操作
你尽量写在__main__里吧,不要按PEP另外起一个main()函数了

热点排行