2016-06-17 5 views
-1

Ich habe eine einfache Login-Anwendung, die Benutzer zur Eingabe von Benutzername und Passwort auffordert. gibt es 2 Tasten, eine für die Anmeldung und andere für den Abbruch.nicht in der Lage, den QDialog in PyQT mit Esc-Taste sauber zu schließen

in den Steckplatz für die Schaltfläche Abbrechen, ich habe den folgenden Code

self.cancelbutton.clicked.connect(self.closeIt) 

def closeIt(self): 
    self.close() 

aber wenn ich die Esc-Taste drücken, oder klicken Sie auf das ‚X‘ in der QDialog, verschwindet das Anwendungsfenster, aber ich tun bekomme die Eingabeaufforderung nicht zurück.

finden Sie den Code für die Hauptfunktion

app = QApplication(sys.argv) 
form = x_LoginForm() 
form.exec_() 
form.close() 
sys.exit(app.exec_()) 

ich nicht in der Lage bin, herauszufinden, was ich falsch mache.

Antwort

1

Sie rufen sys.exit(). Das wird sofort Python verlassen. Auch ist es nicht wirklich viel Sinn machen form.exec_() zu rufen und rufen dann app.exec_()

Sie nur die app.exec_() benötigen sollten

app = QApplication(sys.argv) 
form = x_LoginForm() 
form.show() 
sys.exit(app.exec_()) 
+0

Dank Brendan, Ihre Antwort gab mir eine Vorstellung davon, was ich falsch mache. sys.exit (form.exec_()) sys.exit (app.exec_()) grundsätzlich wartete python auf den Code, um das Formular zu beenden, das ich zuvor instanziiert hatte –

+0

aber das führt zu einer anderen Frage, gibt es eine Möglichkeit, um alle laufenden Threads zu zwingen, geschlossen zu werden. Wenn ich also die Esc-Taste drücke oder auf die Schaltfläche "X" klicke, wird das Programm sauber beendet. –

+0

Haben Sie die Threads mit 'QThreads' erstellt? Sie haben Methoden, um sie zu töten oder zu warten, bis sie fertig sind - '.wait(), .quit(), .terminate()' –