• Home
  • |
  • Blog
  • |
  • Python Tkinter Tutorial #3 – Die Tkinter Event Loop

Python Tkinter Tutorial #3 – Die Tkinter Event Loop

Zuletzt aktualisiert: September 16, 2024

In diesem Beitrag werden wir uns das Konzept der Tkinter Event Loop genauer ansehen, damit du verstehst, wie sie funktioniert und weshalb sie so wichtig ist.

Inhaltsverzeichnis

1. Was passiert beim Starten der Tkinter Event Loop?

Im letzten Beitrag hatten wir bereits festgestellt, dass das alleinige Erzeugen eines Tk-Objekts nicht ausreicht, um eine funktionsfähige GUI-Anwendung laufen zu lassen. Zusätzlich müssen wir immer auf dem Objekt die sogenannte Event Loop starten. Das wird mit der Methode mainloop() umgesetzt.

Doch was genau passiert durch den Aufruf dieser Methode? Zum einen wird zunächst die Abarbeitung des Python Codes gestoppt. Das heißt: Folgen unterhalb des Methodenaufrufs im Programm noch weitere Anweisungen, werden diese erst mal nicht ausgeführt.

Stattdessen startet die besagte Tkinter Event Loop, welche eine Endlosschleife darstellt, die mehrfach pro Sekunde überprüft, ob ein Event auftritt.

Ein Event ist jegliche Interaktion des Nutzers mit der GUI.

Wenn wir das Programm aus dem letzten Beitrag jetzt also noch mal starten, wird der Python Code im File bis zu dem Punkt abgearbeitet, an dem wir die Methode mainloop() aufrufen:

Der Python Code wird bis zum Start der Tkinter Event Loop abgearbeitet

Mit dem Aufruf der mainloop()-Methode stoppt die Abarbeitung des Python Files an dieser Stelle und die Event Loop übernimmt.

2. Wann kommt es zu einem Event?

Damit öffnet sich das GUI-Fenster und das Programm prüft permanent, ob ein Event auftritt. Wenn der Nutzer die GUI an dieser Stelle einfach nur ansieht und keine Handlung vornimmt, entsteht logischerweise kein Event. Entschließt er sich allerdings dazu, mit der GUI zu interagieren, beispielsweise, indem er das GUI-Fenster größer zieht, dann erkennt die Event Loop ein Event.

Die Tkinter Event Loop erkennt ein Event, wenn der Nutzer die Größe des GUI-Fensters ändert

In diesem Fall ist das Event die Veränderung der GUI-Fenstergröße. Im Hintergrund ist durch das Tk-Objekt implementiert, wie sich die GUI daraufhin verhalten soll. Dabei wurde in diesem Beispiel implementiert, dass sich das Fenster entsprechend vergrößert oder verkleinert, sobald der Nutzer mit der Maus daran zieht.

Ein weiteres Event würde stattfinden, wenn der Nutzer innerhalb der GUI etwas anklickt. Das wäre ein sogenanntes Klick-Event. Ebenfalls im Tk-Objekt implementiert ist, dass sich das Fenster schließt, wenn der Nutzer oben links auf das Kreuzsymbol klickt.

Was dabei eigentlich passiert ist, dass sich die Event Loop beendet.

3. Was passiert, wenn die Tkinter Event Loop beendet wurde?

Sobald die Event Loop beendet ist, geht es im Python File nach dem Methodenaufruf mainloop() ganz normal weiter. Da im aktuellen Beispiel nach dem Methodenaufruf kein Code mehr folgt, wird das Programm beendet.

Wir könnten nun unter dem Methodenaufruf mainloop() auch noch mithilfe von print eine Konsolenausgabe veranlassen, die den Text „Testausgabe“ anzeigen soll:

root.mainloop()

print("Testausgabe")

Wenn wir das Programm dann erneut ausführen, sehen wir, dass die Ausführung des Python Codes im File an der Stelle, an der wir die mainloop-Methode aufrufen, tatsächlich stoppt.

Denn wie wir sehen, gibt uns das Programm aktuell den String „Testausgabe“ noch nicht auf der Konsole aus:

Der Text "Testausgabe" erscheint noch nicht in der Konsole

Erst wenn wir das Fenster schließen, das sich geöffnet hat und damit die Event Loop beenden, arbeitet das Programm den Code ab, der danach folgt.

Wenn wir das Fenster schließen, beenden wir die Tkinter Event Loop

Daraufhin sehen wir also „Testausgabe“ in der Konsole:

Erst daraufhin sehen wir "Testausgabe" in der Konsole

Damit weißt du jetzt schon mal grob, was die Event Loop macht und wofür es sie gibt.

Kurzgesagt handelt es sich dabei um eine Endlosschleife, die konstant prüft, ob ein Event auftritt. Wenn ein Event auftreten sollte, können wir nach Belieben mithilfe unseres Programmcodes darauf reagieren.