467
Kapitel 16
Layout
Wenn in einem Skript Widgets durch entsprechende Konstruktoraufrufe generiert worden
sind, ist durch die Konfiguration der
master-Option bereits die Master-Slave-Hierarchie
definiert. Damit hat man im Groben die Struktur einer Benutzungsoberfläche festgelegt.
Der nächste Schritt ist das Layout, das heißt die Anordnung der einzelnen Widgets im
Anwendungsfenster. Zu diesem Zweck verwendet man bei tkinter so genannte Layout-
manager. Mit ihrer Hilfe wird eine logische Struktur geschaffen, die das System zur Laufzeit
versucht, so gut es geht, umzusetzen, auch wenn die Fenstergröße und damit der zur Ver-
fügung stehende Platz sich ändert.
In den bisherigen Beispielen haben wir als Layoutmanager den Packer verwendet. Ein Wid-
get wird ja erst dann sichtbar, wenn es mithilfe eines Layoutmanagers in seinen Master plat-
ziert worden ist. In diesem Kapitel werden nun einige Grundtechniken des Layouts mit zwei
unterschiedlichen Layoutmanagern (
pack() und grid()) behandelt.
16.1 Der Packer
Mit dem Packer kann man Widgets untereinander und nebeneinander im Master platzie-
ren. Jedes Widget besitzt die Methode
pack(), mit der man den Packer aufruft. Die Position,
an der das nächste Widget an die bereits vorhandenen Widgets desselben Masters angefügt
wird, bestimmt man mit den Optionen
side oder anchor (siehe Abbildung 16.1). Beispiel:
Abbildung 16.1 zeigt das Ergebnis.
from tkinter import *
fenster = Tk()
labels=[]
for i in range(4):
labels.append(Label(master=fenster, text=str(i),
bg='white', font=('Arial', 50)))
labels[0].pack(side=TOP)
labels[1].pack(side=RIGHT)
labels[2].pack(side=RIGHT)
labels[3].pack(side=LEFT)
fenster.mainloop()
Kapitel 16
Layout
468
Abb. 16.1: Packen von Label-Widgets
Bei komplexeren Benutzungsoberflächen sind an einigen Stellen Widgets nebeneinander und
an anderen Stellen untereinander angeordnet. In diesem Fall verwendet man Frames. Für die
Planung eines Layouts mit dem Packer kann man den Entwurf durch gerade Schnitte so weit
zerlegen, bis jede zusammenhängende Gruppe von Widgets einheitlich orientiert ist. Das
heißt, die Widgets der Gruppe sind entweder von rechts nach links oder von oben nach unten
aufgereiht. Für jede Gruppe, die aus mehr als einem Widget besteht, erzeugen Sie einen
Frame, dem die enthaltenen Widgets als Slaves zugewiesen werden (vgl. Abbildung 16.2).
Option Erklärung
anchor
Mögliche Werte: CENTER, E, N, NE, NW, S, SE, SW, W.
Widget wird in eine Ecke oder mittig an einer Seite der Zelle platziert, entspre-
chend der angegebenen »Himmelsrichtung« (z.B.
NE = Nordost = rechts oben).
expand
expand=0
: Die Größe des Widgets ändert sich nicht, wenn das Anwendungs-
fenster vergrößert wird.
expand=1: Die Größe des Widgets passt sich an, wenn das Anwendungsfenster
vergrößert wird.
fill
fill=X
: Das Widget wird in waagrechter Richtung (»x-Achse«) so weit mit lee-
rem Raum gefüllt, dass sich seine Ausmaße der Größe des Masters anpassen.
fill=Y: Das Widget wird in senkrechter Richtung (»y-Achse«) an die Größe des
Masters angepasst.
fill=BOTH: Das Widget passt sich in beiden Richtungen dem Master an.
fill=None: Das Widget behält seine Größe unabhängig von den Ausmaßen
des Masters.
padx
Die Zelle wird rechts und links vom Widget in der angegebenen Länge mit lee-
rem Raum gefüllt. Die Option
padx=10 bewirkt z.B., dass die Zelle rechts und
links um zehn Pixel verbreitert wird.
pady
Die Zelle wird oberhalb und unterhalb des Widgets mit leerem Raum gefüllt.
side
LEFT
: Das Widget wird an den linken Rand des Masters gesetzt.
RIGHT: Das Widget wird an den rechten Rand des Masters gesetzt.
TOP: Das Widget wird nach oben gesetzt.
BOTTOM: Das Widget wird nach unten gesetzt.
Tabelle 16.1: Die wichtigsten Optionen für den Packer

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.