2013-03-25 2 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

왜 '앱'을 만드나요? – wRAR

+0

아하, 내가'앱'을 제거하고 제대로 작동했습니다. pyuic이 반환 한 파일에서 코드를 얻었습니다. – sommerjj

답변

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 객체를 생성해서는 안되며, 그 객체를 파괴하는 응용 프로그램을 닫습니다 놀라지 아닙니다.

관련 문제