2016-04-04 6 views
1

Ich arbeite an einem Datenbank-gtk3-basierten Programm. Das verwendete Betriebssystem ist Linux Mint 17.3 64-Bit und Win 7 64 Bit. Problem getestet unter Python 2.7. Ich kann anscheinend nicht in der Lage sein, das Schließen des Hauptfensters zu kontrollieren. Ich möchte verhindern, dass das Fenster geschlossen wird, wenn Änderungen ungespeichert sind. Ich verwende:Python GTK 3+ steuert das Schließen des Fensters

self.window.connect("delete-event", self.quit) 

Das "zerstören" -Ereignis scheint völlig unkontrollierbar. Von dem, was ich verstehe, ist "delete-event" eine Anfrage, also kontrollierbar. So sieht dann self.quit wie folgt aus:

def quit(self, widget, something): 
    check_before_quit() 

Also dann check_before_quit() überprüft, ob es irgendwelche nicht gespeicherten Änderungen. Posts den Dialog und das Hauptfenster ist immer noch zurück. Code ist so eingestellt, dass Gtk.main_quit() gestartet wird, wenn OK gedrückt wird, andernfalls nur return. An dieser Stelle, egal ob ich Ok/Abbrechen drücke oder den Dialog schließe, wird das Hauptfenster trotzdem geschlossen! Das Gleiche passiert unter Win 7 und Linux. Ich habe eine Bindung unter Strg + Q, um zu beenden. Dies scheint gut zu funktionieren, fragt und beendet sich korrekt oder bleibt im Programm. Hat das Drücken der Taste zum Schließen des Fensters irgendwie Vorrang?

Antwort

2

Der delete-event Handler sollte True oder False zurückgeben, nicht das Beenden selbst. Es sollte True zurückgeben, wenn Sie das Fenster nicht schließen möchten, und False, wenn Sie dies tun. Das klingt ein wenig nach hinten, also werde ich es anders formulieren: Es sollte True zurückgeben, wenn Sie das Signal genau dort stoppen wollen, oder False, wenn Sie nichts dagegen tun wollen.

+0

Das war soooo einfach. Vielen Dank !!! –

Verwandte Themen