63. Geometry Management

Wenn wir ein Widget instanzieren, erscheint es noch nicht auf dem Schirm (Ausnahmen: Tk, Toplevel) – es weiß ja nicht, wo.

Position und Größe von Widgets wird von einem Geometry Manager gesteuert. Im Tk gibt es davon drei:

  • grid: Positionierung in Zeilen und Spalten
  • pack: „Aneinanderpacken” in horizontaler oder vertikaler Richtung
  • place: Positionierung an feste Koordinaten

In Tkinter sind die Geometriemanager als Mixins realisiert, als Klassen, die in die eigentlichen Widgets eingebettet sind („reingemischt”). Daher erscheinen die Methoden zum Geometriemanagement als Methoden der Widgets. In Wirklichkeit delegieren die Widgets die entsprechenden Aufrufe an den Geometriemangager, rufen also einfach direkt dessen Methoden auf.

In anderen Toolkits tauchen die Geometriemanager expliziter auf und sind häufig eigene Klassen, denen man auf die eine oder andere Art sagt, dass sie sich um ein Widget kümmern sollen.

Um ein Widget einem Geometriemanager zu unterstellen, ruft man eine der Methoden grid, pack oder place auf. Innerhalb eines Containers (das ist ein Widget, das andere Widgets enthält; bisher kennen wir Tk, häufiger wird man aber Frame verwenden) sollte immer nur ein Geometriemanager verwendet werden.

import Tkinter
root = Tkinter.Tk()
b1, b2, b3 = [Tkinter.Button(root, text=label)
  for label in ["foo", "bar", "baz"]]
b1.pack()
b2.pack(expand=1, fill=Tkinter.Y)
b3.pack(expand=1, fill=Tkinter.X)
root.mainloop()

Aufrufe an pack nehmen verschiedene Optionen. Die wichtigsten sind

  • side – entweder Tkinter.TOP (default, die Widgets werden übereinandergepackt) oder Tkinter.LEFT (die Wigets werden nebeneinandergepackt)
  • expand – wenn das Elterwidget mehr Platz bekommt, bekommt auch das Widget mehr Platz (1) oder nicht (0).
  • fill – wenn das Widget mehr Platz bekommt, wächst es nicht mit (Tkinter.NONE), horizonal (Tkinter.X), vertikal (Tkinter.Y) oder in beide Richtungen (Tkinter.BOTH)

Auch bei den anderen Geometriemanagern gibt es Optionen, nur sehen sie eben anders aus. Wer etwas mit Tk machen will, sollte sich auf jeden Fall neben dem Pack-Manager auch noch den Grid-Manager ansehen.


Markus Demleitner

Copyright Notice