Einstieg in Tkinter

In diesem Blogbeitrag geht es um Tk und Tkinter. Bei Tkinter handelt es sich um eine Sprachanbindung an das GUI-Toolkit Tk, das ca. 1988 von John Ousterhout an der Universität Berkeley entwickelt wurde. Mit dem Paket Tkinter können grafische Anwendungen (GUI: Graphical User Interface) in der Programmiersprache Python geschrieben werden.

Tkinter installieren

Seit Python 3.7 ist Tkinter bzw. sind die darunter liegenden Bibliotheken Tcl/Tk Bestandteil des Python-Installationspakets für macOS und Windows, das von der Internetseite der Python Foundation heruntergeladen werden kann. Auf Linux-Systemen ist Python in der Regel bereits installiert. Tk bzw. Tkinter kann hier über den jeweiligen Paketmanager zusätzlich installiert werden. Bei den auf Debian basierenden Systemen lautet die Installationsanweisung wie folgt:

sudo apt-get install python3-tk

Nutzer von Fedora können Tkinter mit folgender Anweisung installieren:

sudo yum install python3-tkinter

Ob Tkinter einwandfrei funktioniert, lässt sich in der Python Shell überprüfen:

>>> import tkinter
>>> tkinter._test()

Es sollte ein kleines Fenster angezeigt werden, in dem unter anderem folgender Text erscheint: „This is Tcl/Tk version 8.6“.

Ein Hello-World-Fenster erstellen

Wenn der Test erfolgreich war, kann mit der Erstellung eines Fensters begonnen werden, das „Hello, World!“ anzeigen soll. Den Anfang macht folgende Importanweisung:

import tkinter as tk

Dann folgen zwei weitere Zeilen:

root = tk.Tk()

root.mainloop()

Mit der Zeile root = tk.Tk() wird das Fenster initialisiert. Die nächste Zeile root.mainloop() startet die Ereignisschleife (auch: Hauptschleife). Dies reicht bereits aus, um ein schlichtes Fenster erscheinen zu lassen, das unter macOS so aussieht:

A simple tkinter window

Nun werden wir dieses Fenster etwas aufpolieren. Außerdem dürfen wir nicht vergessen, im Fenster „Hello, World!“ anzeigen zu lassen. Beginnen wir mit dem Fenster-Titel. Standardmäßig erscheint nur „tk“. Dies soll zu „Ein Hello-World-Programm“ geändert werden, was durch das Hinzufügen nachfolgender Zeile erreicht wird. Nachfolgender Code muss dabei stets vor der Zeile root.mainloop() hinzugefügt werden.

root.title("Ein Hello-World-Programm")

Leider verhält es sich so, dass aufgrund des kleinen Fensters der Titel nicht vollständig sichtbar ist. Die Angabe von Breite und Höhe ändert dies:

root.geometry("400x200")
A simple Tkinter windows on macOS.
Ein leeres Tkinter-Fenster mit einem Titel

Abschließend wird ein Label-Widget mit dem Text „Hello, World!“ hinzugefügt. Der Hintergrund soll grün, der Vordergrund weiß sein. Die Schriftgröße beträgt 18.

tk.Label(root,
        text="Hello, World!",
        background="green",
        foreground="white",
        font=("TkMenuFont", 18)).pack()
tkinter window with a hello-world label
„Hello, World!“ in einem Tkinter-Fenster

Als erstes Argument wird an tk.Label() der Name jenes Objekts (hier: root) übergeben zu dem das Widget hinzugefügt werden soll. Der übrige Code sollte mit Ausnahme von pack() selbsterklärend sein.

Für die Ausrichtung von Widgets sind Layout-Manager zuständig. Tkinter stellt drei Layout-Manager zur Verfügung, wobei einer davon Pack ist (die anderen beiden heißen Place und Grid). Die Methode pack() ordnet das Label-Widget an oberster Position zentriert an. Es stehen verschiedene Parameter zur Verfügung, um die Position eines Elements anzupassen. Beispielsweise führt pack(side="left") dazu, dass ein Widget linksbündig platziert wird.

tkinter window with a label on the left side
Hello-World-Label, das auf der linken Seite angeordnet ist

Das vollständige Tkinter-Programm sieht jetzt folgendermaßen aus:

#!/usr/bin/env python3

import tkinter as tk

root = tk.Tk()
root.title("Ein Hello-World-Programm")

root.geometry("400x200")

tk.Label(root,
        text="Hello, World!",
        background="green",
        foreground="white",
        font=("TkDefaultFont", 18)).pack(side="left")

root.mainloop()