Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:tk

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
python:tk [2023/03/13 13:44]
root
python:tk [2023/03/28 07:58] (aktuell)
root [Grid]
Zeile 11: Zeile 11:
 ====== Begriffe/Konzept ====== ====== Begriffe/Konzept ======
  
-==== Widgets =====+===== Widgets =====
  
   * alle Elemente die man sehen kann   * alle Elemente die man sehen kann
Zeile 24: Zeile 24:
           * es gibt nur ein root, ein root kann aber mehere Toplevel haben (mehere Fenster)           * es gibt nur ein root, ein root kann aber mehere Toplevel haben (mehere Fenster)
  
 +==== Konfiguration/Konfigurationsoptionen ====
  
 +  * die Eigenschaften von Widgets werden "indirekt" gesetzt (nicht über Objekt-Attribute)
 +  * entweder beim instanzieren als Parameter
 +  * oder über Indexes
 +
 +<sxh python>
 +button = ttk.Button()
 +button["text"] = "SomeText"
 +</sxh>
 +
 +oder über die configure-Methode:
 +
 +<sxh python>
 +button = ttk.Button()
 +button.configure(text = "SomeText")
 +</sxh>
 +
 +  * Attribute sind also nicht direkt als solche zugänglich
 +
 +
 +  * man kann sich alle Eigenschaften auflisten lassen:
 +<sxh python>
 +button.configure()
 +</sxh>
 +
 +<sxh python>
 +{'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'),
 +</sxh>
 +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'
 +
 +
 +==== Informationen über Widget-Objekte ====
 +
 +  * winfo liefert für ein Widget-Objekte Informationen
 +  * window ist eine veraltete Bezeichnung für Widget innerhalb Tk
 +
 +<sxh python>
 +button.vieweable()
 +</sxh>
 +
 +^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
 +      * 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/Spalten Priorität über andere haben sollen und das sie den gesamten zur Verügung stehenden Platz füllen sollen
 +
 +
 +===== Events =====
 +
 +  * Ereignisse wie Mausklicks, Tastenanschläge usw.
 +      * oder interne Events wie Timer 
 +
 +==== Eventloop ====
 +
 +<sxh python>
 +from tkinter import *
 +root = Tk()
 +root.mainloop()
 +</sxh>
 +
 +  * root.mainloop() startet hier die Eventloop
 +      * mainloop ist Teil des root-Elements, welches durch instanzieren von Tk entsteht
 +  * 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)
  
python/tk.1678711454.txt.gz · Zuletzt geändert: 2023/03/13 13:44 von root