TK = Oberflächen-Bibliothek von TCL (Scriptsprache)
hat Bindings zu verschiedenen anderen Sprachen
schnell zu erlennen
weniger Aufwand als die großen Frameworks (GTK, QT usw.)
war zeitweise als
HTML-Rendering-Engine gedacht (angeblich)
Begriffe/Konzept
alle Elemente die man sehen kann
manchmal auch Controls genannt
jedes Widget wird durch ein eigenes Objekt dargestellt
alle Widgets haben ein Eltern-Element innerhalb dessen sie ggf. platziert sind
das ist der erste Parameter beim instanzieren
das oberste Element ist root
root entsteht beim instanzieren von TK
das trifft auch auf Fenster (sogenannte Toplevel) zu
Konfiguration/Konfigurationsoptionen
button = ttk.Button()
button["text"] = "SomeText"
oder über die configure-Methode:
button = ttk.Button()
button.configure(text = "SomeText")
button.configure()
{'command': ('command', 'command', 'Command', '', ''),
'default': ('default',
'default',
'Default',
<index object: 'normal'>,
<index object: 'normal'>),
'takefocus': ('takefocus',
'takeFocus',
'TakeFocus',
'ttk::takefocus',
'ttk::takefocus'),
'text': ('text', 'text', 'Text', '', 'Bla'),
Ausgabe ist abgeschnitten…
1. Parameter ist der Parametername
2. Parameter Object-Name in der Options-Datenbank (in der Regel unrelevant)
3. Parameter Objekt-Klasse in der Options-Datenbank (in der Regel unrelevant)
4. Parameter Default-Wert → bei „text“ „“ → leer
5. der aktuelle Wert → bei „text“ 'Bla'
button.vieweable()
Methode | Beschreibung |
winfo_class | Klasse des Widget-Objektes |
winfo_children | Liste von Kind-Objekten (also direkten Kindern).
Zum Beispiel um alle Objekte innerhalb eines Fensters (root oder TopLevel) oder Frames zu enthalten |
winfo_parent | Das Eltern-Widget des Widgets |
winfo_toplevel | Toplevel-Fenster zu dem das Widget gehört |
windfo_width | Derzeitige Breite des Elements (wenn es auf dem Bildschirm angezeigt wird) |
windfo_height | Derzeitige Höhe des Elements (wenn es auf dem Bildschirm angezeigt wird) |
winfo_reqwidth | Die Breite die das Widget vom Geometrie-Manager angefordert hat |
winfo_reqheight | Die Höhe die das Widget vom Geometrie-Manager angefordert hat |
winfo_x | X-Position des Widgets innerhalb des Eltern-Widgets |
winfo_y | Y-Position des Widgets innerhalb des Eltern-Widgets |
winfo_rootx | X-Position betrachtet auf den gesamten Bildschirm |
winfo_rooty | Y-Position betrachtet auf den gesamten Bildschirm |
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
es gibt mehrere
erst durch Aufrufen des Geometry-Managers für ein Widget wird es platziert und sichtbar
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
die Tabelle nimmt per Default nur so viel Platz ein wie benötigt wird
es kann optional definiert werden das bestimmte Zeilen/Spalten Priorität über andere haben sollen und das sie den gesamten zur Verügung stehenden Platz füllen sollen
Events
Eventloop
from tkinter import *
root = Tk()
root.mainloop()
root.mainloop() startet hier die Eventloop
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)