在qdialog打开时关闭qmainwindow时Python发生崩溃

我有一个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关闭时将它们杀死。


好的,我已经找到了解决方法,但我不确定是否是正确的方法。

在我的DashBoard init方法中,我添加了一个python列表,它将存储所有打开的对话框:

def __init__(self):
    QtGui.QMainWindow.__init__(self)
    super(DashBoard, self).__init__()

    # setup UI
    self.setupUi(self)
    self.newOrderBtn.clicked.connect(self.newOrder)

    self.soTab = []

然后,在同一个类中,我定义了一个处理closeEvent并关闭所有对话框的方法。

def closeEvent(self, event):
    for so in self.soTab:
        if so:
            so.close()
    event.accept()
链接地址: http://www.djcxy.com/p/39277.html

上一篇: Python crash when closing qmainwindow with qdialog open

下一篇: How to make a Qt dialog to deal with key event instead of all its child widget?