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 14:47]
root [Widgets]
python:tk [2023/03/28 07:58] (aktuell)
root [Grid]
Zeile 73: Zeile 73:
  
  
 +==== 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.1678715255.txt.gz · Zuletzt geändert: 2023/03/13 14:47 von root