Arbeiten mit IDLE & Tkinter

IDLE ist selbst eine Tkinter-Anwendung. Das heißt: IDLE wurde (von Guido van Rossum) mit Hilfe von Tkinter programmiert. Wenn nun in IDLE eine weitere Tkinter-Anwendung gestartet wird, gibt es zwei Probleme: erstens, das kleine Tkinter-Skript darf beim Beenden IDLE nicht auch gleich mit beenden (Ich will ja meine Arbeit mit IDLE fortsetzen). Und zweitens: Beim Start einer Tkinter-Anwendung erzeugen wir zuerst ein Wurzel-Fenster mit Hilfe der Methode
root = Tk()
Wenn wir dann unsere Anwendung starten, rufen wir die mainloop()-Methode auf:
root.mainloop()
mainloop steht für eine Endlosschleife (!), unser Tkinter-Skript wartet dann auf so interessante Ereignisse wie einen Maus-Klick oder eine Maus-Bewegung. Und hier liegt das zweite Problem versteckt: Der Aufruf von IDLE bewirkt natürlich auch den Aufruf der mainloop()-Methode, wenn ich jetzt in IDLE nochmals die mainloop()-Methode aufrufe, dann kommt Tkinter "durcheinander"! Deshalb hier der ausdrückliche Hinweis:

Rufe in IDLE nie den mainloop()-Befehl auf!

Und wenn doch? Nun, die Arbeit mit und in IDLE funktioniert reibungslos bis es ans Beenden von IDLE geht. Dann kommt die interessante Nachricht:

Wer nun glaubt, durch einen Klick auf OK   IDLE zu beenden, sieht sich leider getäuscht! In Linux muß man den Prozeß "abschießen", und etwas ähnliches sollte man auch unter Windows versuchen! Einfacher geht es so:

In IDLE nie den mainloop()-Befehl aufrufen!

Bleibt noch das Beenden einer Tkinter-Anwendung. Hier reicht die destroy()-Methode aus, Beispiel:
root.destroy()
Diesen Befehl darf man auch in IDLE ausführen. Dagegen beendet der folgende Befehl
root.quit()
auch gleich IDLE und ist deshalb zum Beenden der Tkinter-Beispiele unter IDLE nicht zu empfehlen :-)

Deshalb gibt es die Beispielprogramme in zwei Versionen, in der IDLE-Version fehlt jeweils die Zeile:

root.mainloop()

am Ende, diese Python-Skripte haben die Endung *.py. Sie können in IDLE ausgeführt werden. Dagegen enthalten die Beispielprogramme mit der Endung *.pyw irgendwo am Ende den Aufruf der mainloop()-Methode. Die Ausführung dieser Programme unter IDLE ist nicht empfehlenswert!

>>> Tkinter-Startseite


    W. Spiegel, E-Mail: walter.spiegel@web.de