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:
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:
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!