2014-01-21 36 views
0

我有一个QMainWindow,每次点击一个按钮就会启动一个QDialog,当我打开一个或多个对话框时关闭QMainWindow时,我无法弄清为什么python二进制文件崩溃。用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关闭时将它们杀死。

+0

python崩溃时没有堆栈跟踪吗? – sashoalm

+0

实际上,它在Linux上运行良好,当我在Windows上的ipython下运行它时,没有回溯,但QDialog保持打开状态,我必须手动关闭它们。我无法在Windows上获得任何回溯。 – sevenup

+0

所以你使用的'崩溃'这个词不像[那种崩溃](http://img205.imageshack.us/img205/9509/winmysqladminxamppdv3.jpg)? – sashoalm

回答

0

好的,我找到了一个解决方法,但我不确定它是否是正确的方法。

在我的控制面板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()