PygTree Dokumentation

Autor:Julian Habrock
Datum:4.8.2008
Inhalt:Dokumentation des PygTree Moduls

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
tags: Programmieren , PyGame & Python erstellt am 26.1.2008 15:04, zuletzt gendert am 6.2.2010 23:36