Programmgesteuertes Schließen des gtk-Fensters

7

Wenn Sie ein Unterfenster in GTK haben und es programmgesteuert schließen möchten (z. B. Drücken einer Speicherschaltfläche oder der Escape-Taste), gibt es eine bevorzugte Möglichkeit, das Fenster zu schließen?

z. B.

%Vor%     
cpburnz 15.05.2011, 00:07
quelle

2 Antworten

7

Sie sollten window.destroy() verwenden, wenn Sie ein Fenster in PyGTK löschen (oder für irgendeine Art von Widget). Wenn Sie window.destroy() aufrufen, gibt das Fenster automatisch ein delete-event -Ereignis aus.

Außerdem muss bei der Ausgabe eines Signals für ein Ereignis mit PyGTK fast immer auch ein Ereignisobjekt an die emit-Methode übergeben werden (siehe pyGObject-Dokumentation für die emit-Methode ). Wenn versucht wird, ein gtk.gdk.Event(gtk.EVENT_DELETE) an die emit-Methode eines Objekts für delete-event zu übergeben, funktioniert es nicht. ZB:

%Vor%

Der beste Weg ist jedoch, einfach die del -Anweisung zu verwenden, die das Fenster / Widget automatisch löscht und alle notwendigen Bereinigungen für Sie vornimmt. Dies ist mehr "pythonisch" als das Aufrufen von window.destroy (), was um einen Verweis auf ein zerstörtes Fenster herumgeht.

    
WirthLuce 15.05.2011, 00:39
quelle
13

Die Methode destroy funktioniert nicht wie erwartet, da die 'delete-event' Callbacks für das zerstörte Fenster nicht aufgerufen werden. Ein Editor zum Beispiel hat keine Möglichkeit den Benutzer nach der Datei zu fragen gespeichert werden.

%Vor%

Im obigen Beispiel ruft das Aufrufen von w.destroy () den Callback nicht auf, während das Klicken auf die Schaltfläche "close" es aufruft (und das Fenster wird nicht geschlossen, weil der Callback True zurückgegeben hat).

Sie müssen also sowohl das Signal ausgeben als auch das Widget zerstören, wenn die Signalbehandlungsroutinen False zurückgegeben haben, z. B.

%Vor%     
zap 24.10.2012 23:17
quelle

Tags und Links