Die Kommandozeile macht sich schön
Einführung in Tcl/Tk, Teil 3
Optik
Bei der Entwicklung Ihres grafischen Programms verfahren Sie in vier Schritten:
- Sie überlegen sich die Funktionen, die das Programm zur Verfügung stellen soll.
- Sie finden heraus, wie die Nutzer auf Funktionen zugreifen sollen und erstellen einen ersten Prototypen auf Papier.
- Sie programmieren die grafische Darstellung ohne Funktionen.
- Wenn Ihnen alles gefällt, programmieren Sie die Funktionen hinzu.Überlegen Sie also als Erstes, was Ihre Oberfläche können soll bzw. was die spätere Nutzerin des Programms an Funktionalität braucht. Lehnen Sie sich zurück, und stellen Sie sich vor, wie Sie oder diejenige, die Sie mit Ihrem GUI beglücken möchten, vor dem Rechner sitzt und Povray bedienen will.
Das könnte z.B. so aussehen: Sie ist gerade dabei, mit einem Editor ihrer Wahl die Datei mit der Povray-Szenenbeschreibung zu erstellen, und möchte nun einfach einen Button drücken, um ihre neuesten Änderungen bildlich zu sehen. Dazu muss die Szene zunächst gerendert und die Bilddatei dann von einem Grafikprogramm angezeigt werden.
Ihre Nutzerin möchte die Größe des zu rendernden Bilds variieren können, um während des Entwicklungsprozesses kleine und am Ende größere Bilder zu berechnen. (Je größer das Bild, desto länger dauert der Povray-Lauf, und so lange möchte sie bei der Entwicklung dann auch nicht immer warten.) Außerdem will sie den Bildern unterschiedliche Namen geben, um auch Zwischenschritte zu dokumentieren.
Damit ist die Funktionalität Ihres Programms klar und im Kasten "Die Funktionen von povgui" zusammen gestellt.
Die Funktionen von Povgui
- Eine Möglichkeit zum Auswählen der Datei mit der Szenenbeschreibung.
- Eine Möglichkeit zum Auswählen der Bilddatei, wobei es nett wäre, wenn das Programm aus dem Namen der Szenendatei einen Vorschlag generiert (Austausch der Dateiendung von
.povnach.tga, siehe auch [8,9]). - Einstellmöglichkeiten für Bildhöhe und Bildbreite.
- Ein Knopf zum Rendern der Szenendatei.
- Ein Button zum Anzeigen des gerenderten Bilds.
Nun kommt Teil Zwei der Programmentwicklung: Sie müssen sich überlegen, wie Sie diese Funktionen so zur Verfügung stellen, dass sie von der Nutzerin möglich einfach zu bedienen sind, wobei Sie sich so weit möglich an bestehenden Anwendungen orientieren sollten. Zeichnen Sie dann eine kleine Skizze, in der Sie die grobe Form des GUI festlegen. Ja, am besten geht das mit Papier und Bleistift, zum Beispiel so wie in Abbildung 1.
Oberflächlichkeiten
Anschließend gehen Sie daran, diese Oberfläche zu programmieren. Dazu greifen Sie in die Widget-Trickkiste von Tk. In Abbildung 2 sehen Sie das GUI mit der Beschreibung der einzelnen Fensterelemente.
Bevor Sie loslegen, noch ein paar Worte zu den Widgets und ihrer Organisation.
In Tk sind die Definition und die Anzeige von Fensterelementen voneinander getrennt. Zunächst legen Sie ein Widget fest und bestimmen dessen Konfiguration wie z.B. seine Aufschrift, Farbe etc. Danach erst übergeben Sie es einem Geometrie-Manager, der es anzeigen lässt.
Wählen können Sie aus drei Geometrie-Managern, die die Darstellung der Widgets unterschiedlich handhaben. Heute lernen Sie zwei davon kennen: pack und grid.
Geometrie-Manager haben die Aufgabe, den ihnen übergebenen Widgets genug Raum zur Verfügung zu stellen. Sie organisieren die Fensterelemente hierarchisch, wobei jedes Widget das Kind eines Eltern-Widgets ist. Die Urahnin aller Widgets ist das Fenster, das Ihr Programm umhüllt. Es trägt den Namen "Punkt" (.). Dieses "Ur-Widget" dient als Container für die Widgets, die darin angezeigt werden sollen. Es gibt aber auch noch andere Fensterelemente, die die Aufgabe von Containern übernehmen, zum Beispiel Frames (Rahmen).
Die Geometrie-Manager grid und pack weisen den ihnen übergebenen Widgets eine "Höhle" innerhalb ihrer Eltern-Widgets zu, die mindestens so groß ist, dass das jeweilige Kind-Widget genug Platz hat. Dieser Raum kann aber auch größer als das Widget sein, wenn sein Nachbar einen größeren Platzbedarf hat.
Der "packer" ordnet die Widgets neben- oder übereinander an, je nachdem, mit welchen Optionen er sie übergeben bekommt. Während dessen organisiert der "gridder" seine Widgets in Zeilen und Spalten wie eine Tabellenkalkulation.
Die Höhlen des packers sind in Abbildung 3, die des gridders in Abbildung 4 dargestellt.
Beide Geometrie-Manager haben ihre Vorteile, und Sie dürfen sich jeweils den passenden für Ihre Problemlösung aussuchen. Zunächst müssen Sie dazu analysieren, wie Ihre Widgets aufgebaut sind.



