Tcl/Tk ist eine Kombination aus der Skriptsprache Tcl, die sehr einfach zu erlernen ist, und dem Toolkit Tk, mit dem sich spielend grafische Benutzeroberflächen, sogenannte GUIs ("Graphical User Interfaces"), zusammenbauen lassen.
Diese Einführung in Tcl/Tk (ehe Sie sich die Zunge brechen, sagen Sie einfach "Tickl-Tikej" dazu) soll Sie in die Lage versetzen, in Zukunft eigene GUIs zu schreiben. Nach ersten Schritten mit einer Knopfleiste zum Aufruf Ihrer Lieblingsprogramme tauchen Sie in Teil 2 tiefer in die Strukturen von Tcl ein, bevor Sie in Teil 3 noch mehr Möglichkeiten von Tk kennen lernen. Mit diesem Wissen ausgerüstet können Sie dann ein kleines Tool zur leichteren Benutzung von Povray, einem freien Raytracer, schreiben.
Programme wie Povray rufen förmlich danach, mit einer grafischen Oberfläche versehen zu werden, weil sie über jede Menge Kommandozeilenoptionen gesteuert werden, die sich Gelegenheitsnutzer oft nicht merken können. Da bietet es sich an, mit Tcl/Tk ein kleines Progrämmchen zu stricken, das die Kommandozeile per Mausklick zusammenbastelt.
Tcl wurde Ende der 80er Jahre von John Ousterhout in Berkeley an der University of California entwickelt. Später kam das Toolkit Tk dazu, um auch grafisch-interaktive Programme mit Tcl erstellen zu können. Ousterhout ging dann zu Sun, portierte Tcl/Tk auf fast alle bekannten Betriebssysteme und betreibt nun eine eigene Firma, Scriptics, die sich zum Ziel gesetzt hat, Tcl/Tk weiterhin als freie Software zu fördern, gleichzeitig aber kommerzielle Anwendungen darum herum zu erstellen und vor allem kommerziellen Support zu bieten.
Ihr Wunsch ist Befehl
Genug der Vorrede: Programmieren lernt man am Rechner, und so starten Sie doch einfach die wish (Abkürzung für "Windoing Shell"), den Tcl/Tk-Interpreter, in einem X-Terminal durch die Eingabe von
wish
Es öffnet sich ein kleines Fenster mit dem Titel wish, und im X-Terminal erscheint ein Prozentzeichen. Hiermit gibt die wish bekannt, dass sie nun auf Ihre Eingaben wartet.
Um mit einer grafischen Benutzeroberfläche zu kommunizieren, brauchen Sie "Schaltflächen", bei Tcl/TK Widgets genannt. Der Ausdruck widget kommt von "window" ("Fenster") und "gadget" ("Dingsbums") und bezeichnet somit ein "Fensterdings". Ein mögliches, und wohl auch das häufigste Widget, ist der gute alte Button. Von diesem erwarten Sie, dass er das tut, was Sie von ihm möchten, wenn Sie mit der Maus darauf klicken. Was dann passiert, soll er Ihnen schon durch seine Beschriftung mitteilen.
Mit Tcl/Tk ist dies besonders leicht, da ein Button einfach mit dem Befehl button .buttonname erzeugt wird. Seine Aufschrift und das, was er auf einen Mausklick hin ausführen soll, geben Sie ihm als Optionen mit auf sein Buttonleben. Damit heißt Ihre erste Zeile Tcl/Tk-Code also
button .beenden -text "Beenden" -command exit
Achten Sie bitte auf die Leerzeichen, und schreiben Sie mindestens jeweils eines. Mehrere schaden nicht. Wenn Sie die erste Zeile eingegeben haben, antwortet Ihnen die wish mit dem Ergebnis Ihrer Eingabe; hier ist es .beenden, der Namen des Buttons. Der Knopf selbst wird allerdings noch nicht angezeigt. Dazu dient eine zweite Zeile.
pack .beenden
In ihr wird der pack-Windowmanager dazu aufgefordert, im Fenster der wish Platz für den Button .beenden einzurichten. Für den Windowmanager sind alle Widgets Kinder des Top-Level-Widgets mit dem einfachen Namen "." ("Punkt"). Er macht das Top-Level-Widget gerade so groß, dass auch besagter .beenden-Button genau hinein passt. Tippen Sie also ruhig die zweite Zeile ein, ohne sich vom Dazwischenreden der wish gestört zu fühlen.
Das Fenster der wish verändert seine Größe und enthält jetzt einen Button mit der Aufschrift Beenden. Wenn Sie auf den Button klicken, verschwindet das Fenster. Da Sie dem Knopf für diesen Fall den Befehl exit mit gegeben haben, wird mit dem Programm auch der Interpreter beendet.
Jetzt sollen Sie aber beginnen, erste "bleibende Werte" zu schaffen, sprich ein Programm. Dieses können Sie mit der Zeit verändern und vergrößern; auf jeden Fall aber speichern und damit auch öfters laufen lassen. Öffnen Sie daher Ihren Lieblingseditor, und geben Sie darin die folgenden Zeilen ein:
button .beenden -text "Beenden" -command exit pack .beenden
Speichern Sie die Datei beispielsweise unter dem Namen erstes.tcl, und starten Sie nun die wish, indem Sie sie mit dieser Datei als Argument aufrufen.
wish erstes.tcl
Wenn alles geklappt hat, müsste sie sich so verhalten, als hätten Sie diese Zeilen direkt eingegeben.
Fehler? Mögen wir nicht!
Die "Lieblingsbeschäftigung" einer Programmiererin besteht darin, zu verstehen, was sie falsch gemacht hat, warum der Interpreter "motzt" oder weshalb das Ergebnis des Programms so gar nicht dem entspricht, was sie eigentlich wollte. Häufig sind es einfach nur Schreibfehler, die die korrekte Ausführung verhindern. Lassen Sie mal vor dem Namen des Buttons den Punkt weg, wenn Sie den Packer anweisen, Platz zu schaffen:
button .beenden -text "Beenden" -command exit pack beenden
Der Interpreter kann Ihr Programm nicht starten und wird meckern, dass er mit dem Argument beenden für den Packer unzufrieden ist (Abbildung 2). Er macht eine kurze Anmerkung zur Art des Fehlers; hier spuckt er noch einen Tipp zur richtigen formalen Syntax (also pack mit einer möglichen Option und mindestens einem Argument, die weiteren Argumente sind in ? eingeschlossen, also optional). Außerdem gibt er nach while executing die genaue Zeile aus, in der der Fehler aufgetreten ist, und benennt noch Datei und Zeilennummer.
Es kann aber auch sein, dass ein Fehler nicht schon beim Starten, sondern erst später im Programm erkennbar wird. Tcl/Tk öffnet dann ein Fenster, in dem es versucht, verständlich zu machen, wo es gerade hapert. Testen Sie dies, indem Sie das Kommando des Buttons falsch schreiben, beispielsweise so:
button .beenden -text "Beenden" -command exut pack .beenden
Wenn Sie nun auf Ihren Beenden-Button klicken, dann erscheint ein Fenster mit dem Fehler (Abbildung 3). Genauere Informationen inklusive Zeilennummer und dem fehlerhaftem Code erhalten Sie durch Anklicken des "Stack Trace"-Buttons.



