Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
python:tk [2023/03/13 17:04] root [Konfiguration/Konfigurationsoptionen] |
python:tk [2023/03/28 07:58] (aktuell) root [Grid] |
||
---|---|---|---|
Zeile 77: | Zeile 77: | ||
* winfo liefert für ein Widget-Objekte Informationen | * winfo liefert für ein Widget-Objekte Informationen | ||
* window ist eine veraltete Bezeichnung für Widget innerhalb Tk | * window ist eine veraltete Bezeichnung für Widget innerhalb Tk | ||
+ | |||
+ | <sxh python> | ||
+ | button.vieweable() | ||
+ | </ | ||
^Methode ^Beschreibung ^ | ^Methode ^Beschreibung ^ | ||
Zeile 93: | Zeile 97: | ||
|winfo_vieweable|Ob das Widget derzeit angezeigt wird oder versteckt ist| | |winfo_vieweable|Ob das Widget derzeit angezeigt wird oder versteckt ist| | ||
| | ||
+ | |||
+ | ===== Geometry-Manager ===== | ||
+ | |||
+ | * managed die Platzierung der Widgets im Fenster | ||
+ | * definiert wie mit leerem Platz umgegangen wird | ||
+ | * wie mit Größenänderung des Fensters umgegangen wird | ||
+ | * Neuplatzierung der Widgets | ||
+ | * verkleinern der Widgets usw. | ||
+ | * es gibt mehrere | ||
+ | * der derzeit üblicherweise genutzte ist grid | ||
+ | * früher wurde pack verwendet | ||
+ | * erst durch Aufrufen des Geometry-Managers für ein Widget wird es platziert und sichtbar | ||
+ | |||
+ | * verschiedene Elemente können einen Geometry-Manager haben | ||
+ | * zum Beispiel root und innerhalb dessen ein Frame | ||
+ | * der Geometry-Manager des Frame-Elements managed nur die Elemente innerhalb des Frames | ||
+ | * und nur den Platz den das Frame-Element hat | ||
+ | * Elemente die andere enthalten werden Master genannt und die enthaltenen Elemente Slave | ||
+ | * ein Master kann (wenn es nicht root ist) gleichzeitig auch Slave sein | ||
+ | * da es in einem anderen Element enthalten ist und selbst Elemente enthält | ||
+ | |||
+ | |||
+ | ==== Grid ==== | ||
+ | |||
+ | * verhält sich ähnlich einer HTML-Tabelle | ||
+ | * so ähnlich wie man früher per HTML-Tabellen Layouts erstellt hat | ||
+ | * es gibt eine Tabelle mit Spalten und Zeilen | ||
+ | * ein Element wird jeweils einer Spalte und Zelle zugeordnet | ||
+ | * ein Element kann allerdings über mehrere Spalten und Zellen gehen (wenn das explizit angegeben wird) | ||
+ | * die Tabelle nimmt per Default nur so viel Platz ein wie benötigt wird | ||
+ | * Elemente verteilen sich also nicht unbedingt gleichmäßig über den gesamten Fensterplatz | ||
+ | * Spalten und Zeilen sind nur so groß wie die Elemente und deren Ausrichtung verlangt | ||
+ | * sie beginnen links (Spalten) und oben (Zeilen) | ||
+ | * leere Zeilen haben keine Größe | ||
+ | * es kann optional definiert werden das bestimmte Zeilen/ | ||
+ | |||
+ | |||
+ | ===== Events ===== | ||
+ | |||
+ | * Ereignisse wie Mausklicks, Tastenanschläge usw. | ||
+ | * oder interne Events wie Timer | ||
+ | |||
+ | ==== Eventloop ==== | ||
+ | |||
+ | <sxh python> | ||
+ | from tkinter import * | ||
+ | root = Tk() | ||
+ | root.mainloop() | ||
+ | </ | ||
+ | |||
+ | * root.mainloop() startet hier die Eventloop | ||
+ | * mainloop ist Teil des root-Elements, | ||
+ | * Mainloop fragt bei jedem Durchlauf alle Objekte ab ob für sie ein Ereignis vorliegt | ||
+ | * Mainloop läuft bis alle Fenster geschlossen wurden | ||
+ | * Mainloop sollte nicht blockiert werden (keine länger dauernden Aufgaben als Teil von ihr ausgeführt werden) | ||
+ | * führt zu fehlenden Reaktionen auf Benutzerereignisse | ||
+ | * führt zu fehlenden Re-Draws (neuzeichnen der Elemente wenn sich etwas ändert oder Fenster gewechselt wurden) | ||