【发布时间】:2014-01-21 14:53:06
【问题描述】:
我有一个 QMainWindow,每次我点击一个按钮时都会启动一个 QDialog,我无法弄清楚为什么当我在打开一个或多个对话框时关闭 QMainWindow 时 python 二进制文件崩溃。
这不是一个复杂的 Qt 应用程序,我真的很难理解会发生什么。
代码如下:
# dependency modules
from PyQt4 import QtGui
import sys
# custom modules
from ui import SingleOrderUI, DashBoardUI
class SingleOrder(QtGui.QDialog, SingleOrderUI.Ui_SingleOrder):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
class DashBoard(QtGui.QMainWindow, DashBoardUI.Ui_DashBoard):
def __init__(self):
QtGui.QMainWindow.__init__(self)
super(DashBoard, self).__init__()
# setup UI
self.setupUi(self)
self.newOrderBtn.clicked.connect(self.newOrder)
def newOrder(self):
print 'New order clicked'
so = SingleOrder(self)
so.show()
app = QtGui.QApplication(sys.argv)
window = DashBoard()
window.show()
sys.exit(app.exec_())
任何帮助将不胜感激。
编辑:使用 ipython 启动时,关闭 QMainWindow 后对话框仍然显示,所以这可能是问题所在。 我将 QMainWindow 作为 QDialog 的父参数,我认为这足以在 QMainWindow 关闭时杀死它们。
【问题讨论】:
-
python崩溃时没有堆栈跟踪吗?
-
实际上它在 Linux 上运行良好,当我在 Windows 上的 ipython 下运行它时,没有回溯,但 QDialogs 保持打开状态,我必须手动关闭它们。我无法在 Windows 上获得任何回溯。
-
所以你使用的“崩溃”这个词不像that kind of crash?
-
嗯,是的,当我尝试在 VS2012 中调试 python 进程时,这是我得到的错误:python.exe 中 0x66CDB906 (QtCore4.dll) 处的未处理异常:0xC0000005:访问冲突读取位置0x00000000.
-
对于 ipython 你的意思是
qtconsole?也许在那种情况下,ipython 的QApplication和您的代码之间存在一些交互(但这完全取决于您如何运行代码等)
标签: python qt python-2.7 pyqt4 qdialog