2013-03-25 171 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对象,我并不感到惊讶的是,销毁该对象关闭应用程序。

相关问题