2017-12-20 72 views
0

내 팝업 창의 결과에 문제가 있습니다. 아래에서는 문제를 이해하기 위해 코드 일부를 보여 줬습니다.확인 대화 상자에서 결과를 얻는 방법

사용자가 GUI에서 어떤 선택을하는 일종의 팝업 창입니다. 이 후 "Are you sure?"라는 질문이 있고 "Yes"와 "No"두 개의 버튼이있는 창을 표시해야합니다.

문제는 내가 아래 코드 (msg.show() 전후)를 테스트 할 때 False과 동일한 값으로 설정된다는 것입니다. 또,>False

  • 내 창을 보여주고 내가 "예"다음 True을 줄 버튼을 클릭하면 버튼을
  • 을 클릭 기다립니다 - 기능 전에

    • :이처럼 작동 나던 왜

      False

    어떻게 적절하게 처리 할 수 ​​있습니까? 다른 접근법이 있습니까? 당신이 창을 닫은 전에 "창 표시 한 후"인쇄되기 때문에

    from PyQt4 import QtCore, QtGui 
    from Message import Ui_Message 
    import sys 
    
    class MessageBox(QtGui.QDialog): 
        def __init__(self, parent=None): 
         QtGui.QWidget.__init__(self, parent=None) 
         self.msg = Ui_Message() 
         self.msg.setupUi(self) 
         self.confirmed=False 
         self.declined=False 
    
         QtCore.QObject.connect(self.msg.NoButton, QtCore.SIGNAL(("clicked()")), self.Declined) 
         QtCore.QObject.connect(self.msg.YesButton, QtCore.SIGNAL(("clicked()")), self.Confirmed) 
    
        def Confirmed(self): 
         self.confirmed = True 
         MessageBox.close(self) 
         return True 
    
        def Declined(self): 
         self.declined = True 
         MessageBox.close(self) 
    
    
    
    if __name__ == "__main__": 
        app = QtGui.QApplication(sys.argv) 
        msg = MessageBox() 
        print('Befor show window',msg.confirmed) 
        msg.show() 
        print('After show window', msg.confirmed) 
        sys.exit(app.exec_()) 
    
  • 답변

    0

    귀하의 예는 작동하지 않습니다. 그것은 블록이 아닌 show() 방법, 그래서 당신의 예는 다음과 같이 작성해야 할 것 exec() 방법이다 : 그러나

    app = QtGui.QApplication(sys.argv) 
    msg = MessageBox() 
    print('Before show window', msg.confirmed) 
    msg.show() 
    app.exec_() # this blocks, waiting for close 
    print('After show window', msg.confirmed) 
    sys.exit() 
    

    될 것입니다 작업을 확인하는 대화 상자를 사용하는 방법을 보여주는 훨씬 더 현실적인 예 다음과 같은 내용 :

    import sys 
    from PyQt4 import QtCore, QtGui 
    
    class MessageBox(QtGui.QDialog): 
        def __init__(self, parent=None): 
         super(MessageBox, self).__init__(parent) 
         self.yesButton = QtGui.QPushButton('Yes') 
         self.noButton = QtGui.QPushButton('No') 
         layout = QtGui.QGridLayout(self) 
         layout.addWidget(QtGui.QLabel('Are you sure?'), 0, 0) 
         layout.addWidget(self.yesButton, 1, 0) 
         layout.addWidget(self.noButton, 1, 1) 
         self.yesButton.clicked.connect(self.accept) 
         self.noButton.clicked.connect(self.reject) 
    
    class Window(QtGui.QWidget): 
        def __init__(self): 
         super(Window, self).__init__() 
         self.button = QtGui.QPushButton('Do Something') 
         self.button.clicked.connect(self.handleButton) 
         layout = QtGui.QVBoxLayout(self) 
         layout.addWidget(self.button) 
    
        def handleButton(self): 
         if self.confirmSomething(): 
          print('Yes') 
         else: 
          print('No') 
    
        def confirmSomething(self): 
         msg = MessageBox(self) 
         result = msg.exec_() == QtGui.QDialog.Accepted 
         msg.deleteLater() 
         return result 
    
    if __name__ == "__main__": 
    
        app = QtGui.QApplication(sys.argv) 
        window = Window() 
        window.show() 
        app.exec_()