Tk: Schlie

22/07/2009 - 16:22 von Oliver ojo Bedford | Report spam
Hi!

In meinem Skript mache ich mittels Tk ein Fenster auf, in das ein externer
Prozess seine Meldungen abwirft. Funktioniert so weit. Wenn allerdings der
Benutzer das Fenster über den Close/Destroy-Button des Fensterrahmens
schließt, kommt es (wenig überraschend) zum Absturz.

Wie verhindere ich das? Muss ich hierzu einen Messagehandler installieren,
der die Messages des Fenstermanagers auswertet bzw. ignoriert?
Oder kann Tk irgendwelche
Hints an den Fenstermanager weitergeben, dass der keinen entsprechenden
Button darstellt?

Zugrundegelegt sei hier eine übliche Linux-Installation.

TIA,
Oliver
 

Lesen sie die antworten

#1 Christian Winter
23/07/2009 - 18:12 | Warnen spam
Oliver 'ojo' Bedford schrieb:
In meinem Skript mache ich mittels Tk ein Fenster auf, in das ein externer
Prozess seine Meldungen abwirft. Funktioniert so weit. Wenn allerdings der
Benutzer das Fenster über den Close/Destroy-Button des Fensterrahmens
schließt, kommt es (wenig überraschend) zum Absturz.

Wie verhindere ich das? Muss ich hierzu einen Messagehandler installieren,
der die Messages des Fenstermanagers auswertet bzw. ignoriert?
Oder kann Tk irgendwelche
Hints an den Fenstermanager weitergeben, dass der keinen entsprechenden
Button darstellt?

Zugrundegelegt sei hier eine übliche Linux-Installation.



Dass ich mich daran versucht habe, ist zwar schon sehr, sehr lange her,
aber bei der Entwicklungsgeschwindigkeit von Tk ist das vermutlich immer
noch ein gangbarer Weg: Tk::MainWindow erbt Methoden von Tk::WM, und
von dort auch die Protokoll-Handler für Window-Manager Events. Für den
Klick auf das Kreuzchen in der Titelleiste sollte immer ein
WM_DELETE_WINDOW Event ausgelöst werden, und dessen Handler gilt es zu
ersetzen.

$mainwin->protocol('WM_DELETE_WINDOW', sub{1});

Das Kreuzchen bleibt damit allerdings klickbar, es passiert halt nix.

HTH
-Christian

Ähnliche fragen