2013-03-25 89 views
1

我有一個PyQt嚮導,其中包含一個對話框,詢問用戶一個問題。該對話框是可選的,只有在用戶需要時才能使用。按鈕發送應用程序接收並打開窗口的信號。我遇到的問題是,當對話框關閉時,它會關閉整個應用程序。我如何確保當對話框關閉時,主應用程序保持打開並運行?這裏處理該對話框的代碼:PyQt對話框退出時關閉整個應用程序

def new_item(self): 
    app = QtGui.QApplication(sys.argv) 
    Dialog = QtGui.QDialog() 
    ui = Ui_Dialog() 
    ui.setupUi(Dialog) 
    Dialog.exec_() 

我嘗試添加一個「取消」按鈕來手動關閉它,但結果是一樣的,整個應用程序關閉。

QtCore.QObject.connect(self.cancel, QtCore.SIGNAL(_fromUtf8("clicked()")), Dialog.close) 
+3

你爲什麼要創建'app'? – wRAR 2013-03-26 00:12:07

+0

啊哈,我刪除了'app',它工作正常。我從pyuic文件中得到了代碼。 – sommerjj 2013-03-27 21:15:41

回答

0

您的代碼應該是這個樣子:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from PyQt4 import QtGui, QtCore 

class MyWindow(QtGui.QWidget): 
    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.dialog = QtGui.QMessageBox(self) 
     self.dialog.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) 
     self.dialog.setIcon(QtGui.QMessageBox.Question) 
     self.dialog.setText("Click on a button to continue.") 

     self.pushButtonQuestion = QtGui.QPushButton(self) 
     self.pushButtonQuestion.setText("Open a Dialog!") 
     self.pushButtonQuestion.clicked.connect(self.on_pushButtonQuestion_clicked) 

     self.layoutHorizontal = QtGui.QHBoxLayout(self) 
     self.layoutHorizontal.addWidget(self.pushButtonQuestion) 

    @QtCore.pyqtSlot() 
    def on_pushButtonQuestion_clicked(self): 
     result = self.dialog.exec_() 

     if result == QtGui.QMessageBox.Ok: 
      print "Dialog was accepted." 

     elif result == QtGui.QMessageBox.Cancel: 
      print "Dialog was rejected." 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.show() 

    sys.exit(app.exec_()) 
0

在你的代碼不應該創建新QApplication對象,我並不感到驚訝的是,銷燬該對象關閉應用程序。

相關問題