[python-users] Neues von UMLTkinter

Thomas Lenarz tommesml at netcologne.de
Mo Jan 5 20:48:50 CET 2009


Hallo zusammen,

für Interessierte gibt es einmal wieder Neues von meinen Experimenten mit Tkinter und 
dem Canvas-Widget. Ich empfand die im TK-Canvas eingebaute Möglichkeit, den Inhalt als 
EPS auszugeben, für eine weitere Bearbeitung nicht als besonders hilfreich. Schöner wäre 
ein Export als GIF oder in einem "echten" Vektor-Format.

Neue zip/tgz-Archive der Sourcen stehen hier:

http://wiki.python.de/User_Group_K%C3%B6ln/UMLTkinter

Es ist möglich, unter Verwendung der Methode find_all() alle Elemente innerhalb eines 
Canvas aufzuzählen (siehe zeichenflaeche.py --> Zeichenflaeche.enumerate_elements())

Diese Aufzählung kann nun zur Rekonstruktion der Grafik in einem anderen Format 
verwendet werden:

1. Unter Verwendung der Python-Imaging-Library (PIL) kann das Bild neu auf/in ein 
ImageDraw-Objekt gezeichnet werden. Dieses erlaubt den bequemen Export in allen 
möglichen Formaten. Unter anderem GIF und JPG. (Ich habe als Beispiel nur GIF 
umgesetzt.). (Die Grundidee, die PIL zu verwenden, habe ich aus einem Forum.)

(siehe: pil_zeichenflaeche.py und graphrenderer_frame.py -> 
frame.export_as_rastergraphic() )

2. Auf Basis der Aufzählung kann SVG (XML-Format zur Beschreibung von Vektorgrafiken) 
als Ausgabeformat erzeugt werden. Das ist überaschend einfach. 

SVG erlaubt über das <g>-Element sogar, die Gruppierung der primitiven Linien und 
Rechtecke zu komplexeren Objekten mit zu speichern. Dies hat dann z.B.: den Effekt, dass 
sich nach dem Einlesen der SVG-Datei in das Vektorgrafik-Programm Inkscape die 
grafischen Objekte, die die Klassen repräsentieren, sich als Ganzes umherschieben lassen.

Dasselbe funktioniert leider nicht für die Pfeile mit Ihren Pfeilspitzen, da dies immer 3 
separate Objekte sind...

(siehe: graphrenderer_frame.py -> frame.export_as_svg() )

(Ist alles experimentell: Entschuldigt bitte die fehlende Kommentierung und das 
Durcheinander von deutschen und englischen Bezeichnern. Habe die Dinge so benannt, wie 
es mir gerade einfiel ;o). )

Viele Grüße
Thomas





Mehr Informationen über die Mailingliste python-users