Kapitel 15
Grafische Benutzungsoberflächen mit tkinter
434
Die zweite Aufgabe ist das Layout. Die Widgets müssen in einem Fenster auf sinnvolle
Weise angeordnet werden. Das Problem ist, dass Größe und Form des Fensters sich zur
Laufzeit des Programms ändern können. Die Widgets werden deshalb meist nicht sta-
tisch und pixelgenau platziert, sondern in ein logisches Raster eingepasst. Somit kann das
Layout bei einer Änderung des Fensterformats dynamisch angepasst werden. Dafür sind
bestimmte Programmkomponenten zuständig, die man Layoutmanager nennt.
Das dritte Problem ist die Definition der Interaktivität. Ereignisse – wie das Anklicken
einer Schaltfläche – müssen mit Funktionalität verknüpft werden.
Der Schwerpunkt dieses Kapitels liegt auf dem Erstellen der Widgets (Punkt 1). Weil die
Materie so komplex ist, belassen wir es zunächst bei einfachen Komponenten wie Buttons
und Labels.
15.1 Ein einführendes Beispiel
Um eine erste Vorstellung von der Arbeit mit tkinter zu bekommen, probieren Sie folgende
kleine Serie von Skripten aus, in der wir Schritt für Schritt eine komplette Benutzungsober-
fläche aufbauen.
Skript:
Erläuterung:
#1: Alle Namen des Moduls tkinter werden importiert.
#2: Ein Objekt der Klasse Tk wird instanziiert. Objekte der Klasse Tk sind Anwendungsfens-
ter – gewissermaßen die äußere Hülle eines Programms.
#3: Das Anwendungsfenster wird aktiviert. Ab jetzt funktionieren die Schaltflächen auf dem
Fensterrahmen.
Auf dem Bildschirm ist ein voll funktionstüchtiges Fenster erschienen, dessen Aussehen
ein wenig vom Betriebssystem abhängt (Abbildung 15.1). Sie können mit der Maus auf die
übliche Weise seine Form ändern, es ikonisieren (auf Symbolgröße verkleinern) und schlie-
ßen. Das genaue Aussehen des Fensters hängt vom Betriebssystem ab. Aber der logische
Aufbau ist immer gleich.
Skript 2:
from tkinter import * #1
fenster = Tk() #2
fenster.mainloop() #3
from tkinter import *
fenster = Tk()
fenster.label = Label(master=fenster,
text='Begrüßung') #1
fenster.label.pack() #2
fenster.mainloop()
435
15.1
Ein einführendes Beispiel
Abb. 15.1: Ein leeres Anwendungsfenster unter Windows XP und Windows 10
Skript 1 wurde um zwei Zeilen erweitert (fett gedruckt).
#1: Durch diese Anweisung wird ein Objekt der Klasse Label erzeugt. Ein Label ist ein Bei-
spiel für ein Widget. Das englische Wort label bedeutet so viel wie Etikett und beschreibt
anschaulich, was gemeint ist: ein rechteckiger Bereich, der mit einer Beschriftung oder einer
Abbildung versehen werden kann. Beim Aufruf des Konstruktors
Label() werden zwei
Argumente übergeben. Das erste Argument
fenster ist das Widget, in das das neue Label-
Widget eingebaut werden soll (der »Master«). Das zweite Argument enthält die Beschriftung
des Labels. Beachten Sie den Namen des Label-Objektes. Er lautet
fenster.label. Das
heißt, wir haben dem Objekt
fenster ein neues Attribut namens label zugefügt.
#2: Mit dem Aufruf der Methode pack() wird ein bestimmter Layoutmanager – der Packer –
einbezogen, der das neue Objekt
label in die Darstellung des Anwendungsfensters fenster
einbaut.
Durch den Packer wird die Größe des Anwendungsfensters so verändert, dass das Label
gerade eben hineinpasst (Abbildung 15.2 links). Aber die Fenstergröße kann natürlich zur
Laufzeit mit der Maus beliebig variiert werden (Abbildung 15.2 rechts). Das Label bleibt
dann oben in der Mitte.
Abb. 15.2: Anwendungsfenster mit Label
Kapitel 15
Grafische Benutzungsoberflächen mit tkinter
436
Skript 3:
Erläuterung 3:
#1: Wir definieren eine Prozedur (Funktion ohne return-Anweisung), die dem Label-
Widget einen neuen Beschriftungstext – nämlich
'Hallo!' – zuweist.
#2: Hier wird ein Objekt der Klasse Button instanziiert. Das Button-Widget stellt eine Schalt-
fläche mit Beschriftung dar. Beim Aufruf des Konstruktors werden drei Argumente über-
geben. Wie beim Label ist das erste Argument der Name des Widgets, in das das neue Widget
eingefügt werden soll. Das zweite Argument ist die Beschriftung und das dritte Argument ist
der Name der Prozedur, die beim Anklicken ausgeführt werden soll. Beachten Sie, dass das
zweite und dritte Argument Schlüsselwort-Argumente der Form
Option=Wert sind.
#3: Hier wird der Layoutmanager Packer aufgerufen, der dafür sorgt, dass die Schaltfläche
im Anwendungsfenster unterhalb des Labels erscheint.
Programmlauf 3:
Auf dem Bildschirm entsteht ein kleines Fenster mit Label und Schaltfläche untereinander.
Beim ersten Klick (linke Maustaste) auf die Schaltfläche ändert sich der Text des Labels. Bei
weiteren Klicks bleibt er, wie er ist, denn es wird jedes Mal die Prozedur
gruessen() auf-
gerufen, die den Text
'Hallo!' in das Label schreibt.
Abb. 15.3: Anwendungsfenster mit Label und Button vor und nach dem Anklicken
def gruessen():
fenster.label.config(text='Hallo!') #1
from tkinter import *
fenster = Tk()
fenster.label= Label(fenster,text='Begrüßung')
fenster.label.pack()
fenster.button = Button(master=fenster,
text='Sage Hallo',
command=gruessen) #2
fenster.button.pack() #3
fenster.mainloop()
Praxistipp: Speichern und Testen von Programmen mit grafischer
Benutzungsoberfläche
Grafische Programme können wie alle Python-Skripte unter einem Dateinamen mit der
Extension
.py abgespeichert werden. Das Programm kann unter Windows durch einfaches

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.