2017-12-20 7 views
0

Ich habe Probleme mit den Ergebnissen meines Popup-Fensters. Im Folgenden habe ich einen Teil meines Codes gezeigt, um das Problem zu verstehen.Wie bekomme ich das Ergebnis aus dem Bestätigungsdialog?

Es ist eine Art Pop-up-Fenster, wo der Benutzer eine Auswahl in der GUI trifft. Danach sollte ein Fenster mit der Frage "Sind Sie sicher?" Und zwei Schaltflächen "Ja" und "Nein" angezeigt werden.

Das Problem ist, dass, wenn ich den Code unten (vor und nach der msg.show()), habe ich den gleichen Wert wie False.

Warum es so nicht funktioniert:

  • Vor-Funktion ->False
  • mein Fenster anzeigen und warten Sie die Taste
  • klicken Wenn ich Schaltfläche geklickt „Ja“, dann True geben, sonst False

Wie kann ich das richtig handhaben? Gibt es einen anderen Ansatz?

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_()) 

Antwort

0

Ihr Beispiel funktioniert nicht, weil Sie drucken „After-Show-Fenster“ vor das Fenster geschlossen hat. Es ist die exec() Methode, die Blöcke, nicht die show() Methode, so dass Ihr Beispiel wie folgt geschrieben werden müssten:

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() 

jedoch ein viel realistischeres Beispiel zeigt, wie ein Dialog verwenden, um eine Aktion zu bestätigen wäre etwas wie dieses:

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_() 
Verwandte Themen