PygTree Dokumentation
| Autor: | Julian Habrock |
|---|---|
| Datum: | 4.8.2008 |
| Inhalt: | Dokumentation des PygTree Moduls |
Contents
Möglichkeiten
Mit PygTree kann zunächst eine abstrakte Baumstruktur erzeugt und dann auf verschiedene Arten dargestellt werden. Grundsätzlich können nur Bäume mit vertikalen Ebenen erzeugt werden. Kinder können eingerückt dargestellt werden, aktiviert und deaktivert bzw. sichtbar und unsichtbar gemacht werden und zur (temporären) Wurzel des Baumes gemacht werden. So ergeben sich zwei grundlegende Möglichkeiten: Eine explorerartige Darstellung mit ein- und ausklappbaren Unterordnern, ein browserartiges Konzept, bei der man von einer Ebene in die nächste wechselt. Natürlich lassen sich beide Varianten beliebig kombinieren. Ein weiterer Vorteil ist, dass man über von Node abgeleitete Klassen eigene Elemente elegant integrieren kann. Ebenso ist das Design sehr einfach und komplett anpassbar, sodass es auch für Spielmenüs jeder Komplexität zu gebrauchen ist.
Node
Node ist die Hauptklasse, von der alle anderen Klassen im Baum erben müssen. In ihr ist die Baumstruktur implementiert, sowie ein grundlegendes Blitting für die zwei Basis-Darstellungsvarianten.
Initialisierung/Argumente
Das erste Argument ist der Text, der dargestellt werden soll. Dann kann optional ein Vaterknoten angegeben werden (s. Erzeugen eines Baumes). Es folgen eine Reihe von möglichen Schlüsselwortargumenten:
- command, icon_command, text_command
Funktion oder Methode, die bei einem Klick auf das Icon oder den Text ausgeführt wird. Mit command können beide Fälle zusammengefasst werden. Neben einer Funktion, die den Knoten als Parameter übergeben bekommt, können auch einige vordefinierte Funktionen als String übergeben werden:
- "toggle"
- Kinder werden ein- und ausgeblendet
- "shift"
- Knoten wird neue, temporäre Wurzel (nicht mehr sichtbar) Beachte: Es wird kein Knoten generiert, mit dem man wieder nach oben kommt. Dies ist Aufgabe des Programmierers, um Probleme in abgeleiteten Klassen zu vermeiden.
- "root_up"
- Temporäre Wurzel wird eine Ebene nach oben verschoben (Vater der aktuellen Wurzel)
- "root_top"
- Wahre Wurzel wird auch temporäre Wurzel
- bg_image
- Der Name eines Bildes im Unterordner data, das als Hintergrundbild verwendet werden soll
weitere Optionen folgen...
Erzeugen eines Baumes
Es gibt zwei Möglichkeiten, einen Knoten einem anderen unterzuordnen. Entweder direkt, indem man schon bei der Initialisierung den Vaterknoten nach dem Text als zweites Argument übergibt (dann wird der Knoten als letztes angehängt), oder nachträglich, indem man den Knoten über die insert-Methode des Vaterknotens an einer bestimmten Stelle (Index) einfügt.
Beispiel:
1 2 3 4 5 6 7 8 9 10 | from pygtree import Node
root = Node("top") # ob die wahre Wurzel sichtbar ist, hängt vom Aufruf der blit-Methode ab
e1 = Node("entry 1", root)
e3 = Node("entry 3", root)
e2 = Node("entry 2", icon_command="toggle")
e2a = Node("entry 2a", e2)
e2b = Node("entry 2b", e2)
root.insert(e2, 1)
|
Klassenattribute
Die Klassenattribute dienen der einfachen Anpassung des Designs bei abgeleiteten Klassen:
- icon_prefix
Ein String, der beim Laden der Icons vor die Iconnamen gehängt wird, sodass ein eigenes Iconset genutzt wird. Default: ""
Beachte: Wenn icon_prefix angegeben wird, müssen alle Icons neu erzeugt oder kopiert & umbenannt werden
- font
Die Parameter, die beim Laden der Schrift übergeben werden. Format: (Name, Größe, Farbe), wobei Name entweder der Name einer Systemschrift oder einer .ttf-Datei im "data"-Unterordner ist. Die Farbe wird, wie in PyGame üblich, als 3er -Tupel angegeben.
Bsp: ("Times New Roman",20, (0,0,0)), ("SF Slapstick Comic Shaded Oblique.ttf", 15,(250,155,55))
- default_bg_image
- Name eines Bildes im Unterordner "data", das als Hintergrundbild verwendet wird, wenn keins bei der Initiallisierung übergeben wird. Default: False
- height
- Höhe (in px) eines Elements Default: 20
- icon_width
- Vertikaler Freiraum (in px), der für Icons freigehalten wird Default: 20
- use_icons
- Boolean, ob icons dargestellt werden sollen Default: True
- icons
- Für interne Zwecke, nur bei massiver Abänderung des Blittens ändern!
Objektattribute
Zur tieferen Anpassung eigener Klassen
- self.text
- Der dargestellte Text
- self.bg_image
- Hintergrundbild oder None
- self.icon_rect
- Rect des Icons oder None
- self.text_rect
- Rect des geblitteten Textes oder None
- self.mouse_over_icon
- True, wenn sich der Mauszeiger im icon_rect befindet, sonst False
- self.mouse_over_text
- True, wenn sich der Mauszeiger im text_rect befindet, sonst False
- self.children
- Liste aller Child-Nodes
- self.expanded
- True, wenn Node ausgeklappt ist, sonst False
- self.parent
- Referenz auf Parentnode
- self.root
- Referenz auf Wurzelknoten oder self (dann ist Node selbst Wurzelknoten)
- self.temp_root
- True, wenn Node temporärerWurzelknoten ist, sonst False
Methoden
- toggle(self)
- Kinder ein-/ausklappen
- shift(self)
- Knoten zur neuen temporären Wurzel machen
- root_up(self)
- Temporäre Wurzel um eine Ebene nach oben verschieben
- root_top(self)
- Wahre Wurzel auch zu temporärer Wurzel machen
- insert(self, node, index="end")
- Ein Kind am gegebenen Index einfügen,
- remove(self, node)
- Bindung zum Kind node wird entfernt
- delete(self)
- Muss noch implementiert werden
- blit(self, screen, pos, as_root=False)
- Blittet den Knoten und alle Kinder an der Stelle pos auf die Surface screen. Wenn as_root wahr ist, werden nur die Kinder geblittet und nicht der Knoten selbst.
- blit_text(self, screen, pos, own_text=False)
- Blittet, falls gegeben, own_text, sonst den objekteigenen Text, an der Stelle pos auf die Surface screen.
- get_prefixes(self, child)
- intern (gibt prefixes zurück, die zum Blitten von child gebraucht werden)
- count_all_active_descendants(self)
- Gibt die Anzahl der sichtbaren Nachfahren zurück
- update(self, events)
- Muss in jedem Durchlauf des Mainloops mit einer Eventliste aufgerufen werden
