Open Source im professionellen Einsatz
Linux-Magazin 05/2005

Erste Schritte: Eigene Tk-Anwendungen entwickeln

Flott an die Oberfläche

Zu den großen Stärken von Tcl/Tk gehört das schnelle Entwickeln grafischer Benutzeroberflächen. Wie einfach das geht, belegt ein kleines Programm, das den Wetterbericht der US-Luftfahrtbehörden auswertet.

842

Viele Programmierer schrecken davor zurück, eine Anwendung mit grafischer Benutzeroberfläche zu schreiben. Bis eine kompilierte Applikation den Bildschirm schmückt, dauert es meist eine Weile. Anders mit Tcl/Tk, hier genügen oft schon Minuten, um Anwendungen jenseits primitiver "Hello World"-Progrämmchen zu entwickeln. Das folgende Beispiel zeigt, wie einfach das mit Tcl/Tk gelingt.

Die Beispielanwendung soll die Wetterdaten deutscher Flughäfen darstellen, die Daten stammen vom US-amerikanischen Wetteramt NOAA. Die National Oceanic and Atmospheric Administration[1] veröffentlicht nicht nur viele Fotos als Public Domain[2], sondern kostenfrei auch Flugwetterdaten im METAR-Format[3] (Meteorological Aviation Report). Quelltext zum Abfragen und Auslesen dieser Daten liegt bereits fertig entwickelt als Bestandteil des Programm Tclweather vor[4]. Dieser Artikel beschäftigt sich damit, die Daten in einer eigenen Oberfläche darzustellen.

Ein GUI entsteht in mehreren Schritten. Das Programm muss die einzelnen Widgets erzeugen, zum Beispiel Knöpfe und Eingabefelder, und sie in der Oberfläche anordnen. Außerdem brauchen die Widgets noch Daten, die sie anzeigen sollen, oder Prozeduren, die auf Benutzereingaben reagieren.

Vorbereitung

Zum Anlegen der Widgets bringt Tk je einen eigenen Befehl mit. Das Kommando »label« erzeugt eine Beschriftung, »button« einen Knopf. Tk enthält alle üblichen Widgets, einen Überblick gibt das mitgelieferte Beispielprogramm »widget«. Es liegt meist unter »/usr/lib/tk8.4/demos/widget« oder »/usr/local/lib/tk8.4/demos/widget«.

Alle Widgets brauchen einen eindeutigen Namen, der sie identifiziert. Der Name spiegelt auch die Struktur, in der die Widgets ineinander geschachtelt sind. Abbildung 1 zeigt einen Ausschnitt der Struktur des Hauptfensters und der Widgetnamen des Wetterprogramms. Das oberste Widget dient als Hauptfenster, es heißt ».«. In ihm liegt ein Rahmen ».frame«, der die Widgets für den Ort oder das Wetter aufnimmt.

Die Namen der Widgets sollten eingängig sein, um beim Programmieren ohne lange zu überlegen auf ihre Aufgabe zu schließen. Wichtige Einschränkung: Sie dürfen keine Leerzeichen enthalten. Praktisch ist, dass die Befehle zum Erzeugen von Widgets den Namen zusätzlich als Rückgabewert weitergeben. Damit kann ein Programm in derselben Zeile ein Widget anlegen und dessen Namen einer Variablen zuweisen: »set Variable [frame Name Optionen]«.

Gemeinsame Optionen

Beim Erzeugen der Widgets können Optionen das Aussehen und Verhalten sehr detailliert festlegen. Viele Optionen wie Farbe oder Schrift gelten für alle Arten von Widgets, einige wesentliche sind in Tabelle 1 enthalten. Welche Optionen jedes Widget versteht, steht in seiner Manualseite, eine genaue Beschreibung aller gemeinsamen Optionen enthält die Manpage »options«.

Der erste Teil der Prozedur »erzeugeOberfläche« in Listing 1 (Zeilen 17 bis 31) zeigt, wie Label- und Frame-Widgets entstehen. Zuständig sind die Kommandos »label« (beispielsweise Zeile 19) und »frame« (Zeile 18). Der erste Parameter dieser Kommandos gibt den Namen des Widget an. Unter diesem Namen entsteht ein neues Kommando, das genau diese Widgetinstanz steuert.

Was beim Aufruf des Widgetkommandos passieren soll, gibt ein Unterkommando an. Alle Widgetinstanzen kennen das Unterkommando »configure«, mit dem das Programm jederzeit Optionen abfragen und ändern kann. Zeile 20 nutzt dies, um die Default-Schrift eines Labels abzufragen. Zeile 21 ändert den Font, Zeile 22 fragt ab, was Tk tatsächlich gewählt hat: Ist die gewünschte Schriftart nicht verfügbar, weicht Tk auf einen ähnlichen Font aus.

Abbildung 1: Die Struktur der GUI-Elemente spiegelt sich in ihren Namen: ».frame.ort« liegt innerhalb seines Vaterwidget ».frame«.

Die neuen Widgets existieren zwar, erscheinen aber noch nicht in der Oberfläche. Das Toolkit muss erst wissen, an welcher Stelle es das Element anordnen soll. Hierfür gibt es mehrere Kommandos, die meisten Anwendungen kommen jedoch mit »pack« und »grid« aus. Ersteres eignet sich für einfache Reihen, ihre Richtung (nach links, oben ...) wird durch die Option »-dir« festgelegt.

Ohne weitere Angaben verändern die Widgets ihre Größe nach dem Platzieren nicht mehr. Sollen sei beim Größerziehen des Fensters mehr Platz einnehmen, muss der Programmierer weitere Optionen einsetzen. Mit »-expand true -fill both« gibt Zeile 34 an, dass der Rahmen in beiden Richtungen wachsen und das Fenster komplett ausfüllen soll.

Die Anzeige der Wetterdaten besteht aus neun Widgets (Zeilen 19 sowie 24 bis 31), hier wäre das Platzieren mit »pack« zu umständlich. Das mächtige »grid«-Kommando eignet sich deutlich besser. Es arbeitet mit einem tabellenförmigen Entwurfsraster aus Spalten und Zeilen, wobei die Zellen je ein Widget aufnehmen. Wie die Zeilen und Spalten auf die Größe der enthaltenen Widgets und auf Größenänderungen das Gesamtrahmens reagieren, lässt sich exakt einstellen. Einzelne Widgets dürfen sich auch über mehrere Zellen erstrecken.

Tabelle 1: Wichtige
Optionen

 

Option

Bedeutung

-background Farbe

Hintergrundfarbe

-foreground Farbe

Textfarbe

-padx Abstand, -pady Abstand

Zusätzlicher Abstand in x- oder y-Richtung

-text Text

Text (bei Label und Eingabefeldern)

-textvar Variablenname

Verbindet das Widget mit dem Inhalt einer Variablen

-font Schriftbezeichnung

Verwendete Schriftart

-label Text

Text (bei Menüs)

-command Befehl

Ausgeführter Befehl

In Abbildung 2 ist das Entwurfsraster in die Anwendung eingezeichnet. Die grünen Pfeile zeigen die Ausrichtung der Widgets innerhalb ihrer Zelle, die roten Pfeile kennzeichnen die Zeilen und Spalten, die wachsen dürfen.

Abbildung 2: Das Entwurfsraster der Oberfläche zeigt, dass Grid die Widgets tabellarisch anordnet und an unterschiedlichen Kanten ausrichtet.

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Oberfläche aufpoliert

    BWidgets ergänzen die normalen Tk-Widgets um häufig benötigte GUI-Elemente wie Tree und Notebook. Anders als die meisten Alternativen sind sie in reinem Tcl/Tk geschrieben und eignen sich daher bestens für plattformübergreifende Anwendungen.

  • Textarbeit

    Ob als Ascii-Editor oder für interaktive Anzeigen mit verschiedenen Schriften und Bildern - das Textwidget von Tk ist sehr flexibel einsetzbar. Diese Federlesen-Folge erklärt das Universalwidget anhand eines einfachen Editors und eines Readers für RSS-Dateien.

  • Zahlreiche Zeiger

    Die X.org-Entwickler haben mit Xinput 2 den Grundstein gelegt, die Macher des GUI-Toolkits GTK+ setzen darauf auf. Dieser Artikel zeigt, wie man damit Anwendungen für mehrere Zeigegeräte programmiert.

  • Augenweide

    Vor kaum zehn Jahren beherrschten graue Anwendungen den grauen Hintergrund des Unix-Desktops. Heute präsentieren sich KDE und Gnome mit moderner Oberfläche. Ihre Gestaltung verlangt ein geschultes Auge und guten Geschmack, beim Anzeigen und Erzeugen der Elemente hilft Tcls Werkzeugkasten.

  • Kleine Mahlzeit

    Es muss nicht immer ein ausgewachsenes Programm sein. Viele kleine Aufgaben lassen sich auch mit Applets erledigen, die im Panel residieren und nur darauf warten, aufgerufen zu werden.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.