Open Source im professionellen Einsatz
Linux-Magazin 07/2005

Bitmaps mit Tcl erzeugen, bearbeiten und benutzen

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.

1026

Alte Unix-Hasen kennen sie noch aus ihrer Jugend, auch junge Linux-Freunde begegnen ihnen gelegentlich: klobige Anwendungen aus der X11-Steinzeit, mit kümmerlichen Toolkits ohne Rücksicht auf Bedienbarkeit und Aussehen entwickelt. Heute verdrängen aufgeputzte Applikationen diese Relikte vom Desktop und bringen frische Farben auf den Bildschirm. Wichtig für die Optik sind ansprechende Icons, die Knöpfe und Toolbars zieren. Gute Icons entwerfen ist eine Kunst; sie in Tk-Programmen zu verwenden dagegen leicht.

In den meisten Fällen gilt es, fertige Icons von der Festplatte zu laden und auf Labels und Buttons zu verwenden. Listing 1 zeigt alles Wesentliche in wenigen Zeilen, Abbildung 1 zeigt das Resultat. Zum Laden farbiger Bilder dient das »image«-Kommando:

image create photo Name -file Dateiname U
  -data Bildinhalt


Abbildung 1: Der Code in Listing 1 erzeugt drei Bilder, die in der ersten Zeile nebeneinander stehen. Darunter folgen zusammengesetzte Labels, die ein Bild mit Text kombinieren.

Dieser Befehl lädt entweder ein Icon aus einer Datei (mit der Option »-file«) oder die Bilddaten stehen direkt Base-64-kodiert im Befehlsaufruf (nach »-data«). Für jedes Icon erzeugt Tk ein Kommando, ganz wie von den Widgets bekannt. Den Namen dieses Kommandos kann der Programmierer vorgeben; verzichtet er darauf, wählt »image« selbst eine Bezeichnung und übergibt sie an den Aufrufer. Letzteres hat den Vorteil, dass dieses Verfahren nicht versehentlich ein vorhandenes Kommando überschreibt. Die Zeilen 5 bis 10 in Listing 1 zeigen mehrere Aufrufvarianten: Die erste gibt den Namen vor, während die anderen beiden diese Aufgabe Tk überlassen. Die Namen speichern sie in den Variablen »rolle« und »ident«. Weitere Optionen fasst Tabelle 1 zusammen.

Bilder im Skript einbetten

In vielen Fällen genügt es, Icons - wie in Zeile 6 und 8 gezeigt - aus einer Datei zu laden. Um die Installation einer Anwendung zu erleichtern, empfiehlt es sich aber, den Bildinhalt passend kodiert im Skript abzulegen. Folgende Zeilen laden ein Gif-Bild und wandeln es in einen Base-64-kodierten String:

package require Base64
set fd [open "icons/gnome-whoami.gif"]
fconfigure $fd -translation binary
set bild [::base64::encode [read $fd]]
close $fd


Der String »$bild« enthält nun den Bildinhalt, den die Image-Option »-data« versteht. Einfach obige Befehle aufrufen, den String mit »puts $bild« ausgeben und den Zeichensalat in das Skript einfügen (vergleiche die gekürzte Zeile 10 in Listing 1). Diesen Trick nutzt auch Adrian Davis\' Icons-Paket ([1] und Abbildung 2). Es verpackt Icons aus dem KDE-Projekt in einem großen Tcl-Skript. Wer dieses Skript in seine Tcl/Tk-Applikationen einbindet, kann bequem KDE-konforme Icons benutzen.

Das geladene Icon eignet sich für Labels, Buttons und Menü-Einträge sowie als eingebettetes Bild in Canvas- und Text-Widgets. Mit der Option »-image« zeigen Labels, Buttons und Menüfelder das gewünschte Icon, mit »-compound Anordnung« gleichzeitig Text und Icon. Mögliche Anordnungen sind »none« (nur Bild), »left« (Bild links des Textes), »right«, »bottom«, »top«, und »center« (Text und Bild zentriert übereinander). Die Zeilen 18 bis 22 (Listing 1) benutzen diese Option; in den unteren drei Vierteln von Abbildung 1 ist das Ergebnis zu sehen. Der Code darf ein geladenes Icon beliebig oft verwenden, auch das bestätigt sich in dem kleinen Programm.

Abbildung 2: Das Icons-Package von Adrian Davis enthält viele Symbolgrafiken aus dem KDE-Projekt. Das Paket bettet diese Bilder direkt in Tcl-Code ein.

Das Neueste

Für die Sprache Tcl gibt es mehrere Interpreter: Neben der bekannten »tclsh« existiert eine reine Java-Implementation namens Jacl [10]. Mit Jim [11] ist ein weiterer Interpreter in Entwicklung. Seine Ziele sind geringer Speicherbedarf - unter 100 KByte - und ein modularer Aufbau, um sich auch für sehr kleine Computer wie Handhelds zu eignen. Aus einer ganz anderen Ecke kommt Parrot [12], die Basis von Perl 6. Bei Parrot soll der Teil zum Lesen der Quellen und Interpretieren getrennt sein, als Beispiel gibt es einen Tcl-Interpreter auf Parrot-Basis. Einstiegshilfen für Tcl mit Parrot finden sich im Wiki [13].

Das Problem der fehlenden PNG-Unterstützung in Tk geht Michael Kirkham mit Tk PNG [14] an. Anders als die im Artikel benutzte Img-Erweiterung bindet Tk PNG keine weiteren Bibliotheken ein. Michael möchte seine Erweiterung langfristig in den normalen Sprachumfang von Tk bringen.

Wer sich mit VTK [9] zum Anzeigen von Daten aus Berechnungen und Messungen beschäftigen will, sollte Paraview [15] näher betrachten. Die leicht zu bedienende Oberfläche enthält viele VTK-Funktionen - das spart in vielen Fällen ein selbst geschriebenes Skript.

PostgreSQL ist eine der besten freien SQL-Datenbanken und ihr Tcl-Support ist exzellent. Mit »pgtcl1.5« [16] unterstützt die bewährte Tcl-Erweiterung nun auch die Features der neuen PostgreSQL-Release 8.0.

Formatwechsel

Dem normalen Image-Kommando fehlt leider die Unterstützung der verbreiteten Icon-Formate PNG und Jpeg, es liest nur Gif. Abhilfe bringt Jan Nijtmans\' Img-Erweiterung [2]. Sie ist in den meisten Linux-Distributionen bereits enthalten; wer die Quellen selbst übersetzen will, findet die aktuelle Version 1.3 bei Sourceforge [3], dort heißt sie wegen eines Namenskonflikts Tkimg. Mit der Erweiterung zeigt Tk auch Icons und Grafiken in den Formaten Jpeg, PNG, Tiff, PPM, ICO, XPM, XBM oder PCX. Es genügt, in Zeile 3 von Listing 1 das Paket mit dem Kommando »package require Img« in den Interpreter zu laden.

Zudem fertigt Img auf Wunsch Screenshots von einzelnen Widgets an. Egal ob es auf ein einfaches Label oder eine komplexe Grafik im Canvas zielt, jedes GUI-Element findet damit seinen Weg in eine Bitmap-Datei. Besonders praktisch ist diese Technik, um dynamische Icons für HTML-Seiten zur Laufzeit zu erzeugen. Ein einfaches Beispiel ist in Listing 2 abgedruckt, es generiert ein PNG-Bild mit der aktuellen Uhrzeit.

Listing 1: Icons laden und
anzeigen

01 #!/usr/bin/tclsh
02 package require Tk
03 
04 # Bilder laden
05 image create photo password 
06     -file [file join icons change-password-48.gif]
07 set rolle [image create photo 
08     -file [file join icons lookandfeel-directory.gif] ]
09 set ident [image create photo 
10     -data "R0lGODlhMAAwAOf/AAABAAACAAEEAAIFAQQHAgUIBAIJDAcJBQg.....]
11 
12 # Bilder verwenden
13 label .password -image password
14 label .rolle    -image $rolle
15 label .ident    -image $ident
16 
17 # Bild mit Text
18 label .identO -text "Oben"   -image $ident -compound top
19 label .identL -text "Links"  -image $ident -compound left
20 label .identZ -text "Mitte"  -image $ident -compound center -fg white
21 label .identR -text "Rechts" -image $ident -compound right
22 label .identU -text "Unten"  -image $ident -compound bottom
23 
24 # Widgets platzieren
25 grid .rolle   .password .ident
26 grid    x     .identO
27 grid .identL  .identZ   .identR
28 grid    x     .identU

Linux-Magazin kaufen

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

Deutschland

Ähnliche Artikel

  • Im Rampenlicht

    Ein überzeugendes Bühnenbild sorgt für die passende Atmosphäre im Theater. Auch am Computer machen Anstrich und Beleuchtung die Illusion von 3D-Modellen perfekt. Selbst einfache Skripte zaubern dank OpenGL mit Hilfe von Bitmaps und Beleuchtung Überraschendes auf den Schirm.

  • Virtueller Bühnenbildner

    Ob Bildschirmschoner, CAD-System oder Flugsimulator - Programme mit dreidimensionalen Effekten sind auf den meisten Computern zu finden, aber schwer zu schreiben. Ein neues Projekt macht Letzteres leichter und öffnet Skript-Programmierern den Vorhang für 3D-Effekte in ihrer Software.

  • Spielkind

    Das schnelle Entwickeln von GUI-Anwendungen ist eine der Stärken von Tcl/Tk. Ein einfaches Spiel zeigt verschiedene Aspekte des Canvas-Widgets, von Animation über Bilder bis Zahlendarstellung.

  • 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.

  • 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.

comments powered by Disqus

Ausgabe 07/2017

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

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