2014-01-21 45 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()