[Python-de] Python/Tkinter hängt

Georg Mischler schorsch at schorsch.com
Tue Jul 23 21:00:42 EDT 2002


Rene Lemke wrote:

>
> Hi,
> Ich bin Python Anfänger. Programmiere sonst C++. Und habe eine
> platformunabhängige Sprache gesucht und gefunden, die auch auf
> langsamen Rechnern ausreichend Performance hat. Nur ist da ein
> massives Problem.
>
> Ich benutze Python 2.2 mit TK/Tcl 8.3.4.3 unter Windows 95.
>
> Wenn ich Programme, die Tkinter verwenden, durch Klick auf das X
> oben rechts beende, hängt Python, egal, ob python.exe oder
> pythonw.exe. Es läßt sich nicht killen. Das wiederum verhindert ein
> sauberes Beenden von Windows.
> Ursache ist:
>    root.wm_protocol('WM_DELETE_WINDOW', root.tk.quit)
>
> Hier mein Test:
>
> import Tkinter
> from Tkconstants import *
>
> root = Tkinter.Tk()
> root.wm_protocol('WM_DELETE_WINDOW', root.tk.quit)
> root.mainloop()

Wenn du das in einer interaktiven Session ausprobierst, dann
wirst du feststellen, dass root.tk.quit() zwar das mainloop
beendet, aber das Fenster stehen laesst. Um das Fenster zu
beseitigen, brauchst du anschliessend noch ein root.destroy().

Die beiden Funktionen sind weitgehend voneinander unabhaengig.
Du koenntest stattdessen z.B. geradesogut ein neues mainloop()
starten, wenn du dich hinterher entscheiden solltest, mit dem
Fenster nun doch weiterzuarbeiten. Das ist z.B. fuer einen
haeufig gebrauchten Dialog nuetzlich, den du so erst mal mit
withdraw() zwischenlagern, und spaeter dann mit deiconify()
wiederbeleben kannst.

Wenn du weisst, dass du das Fenster wirklich jedemal schliessen
willst, dann ist die normale Vorgehensweise, fuer WM_DELETE_WINDOW
eine eigene Funktion zu registrieren, welche die kompletten
Aufraeumarbeiten am Stueck erledigt.


-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/




More information about the Python-de mailing list