Eine recht angenehme Sprache zur Programmierung unter X-Windows ist die Tool Command Language (Tcl), zusammen mit ihrer X-Windows Erweiterung Toolkit (Tk). Unter dieser Interpretersprache werden Programme in zwei Phasen ausgeführt. In der ersten Phase, die sofort nach dem Aufruf beginnt, wird das Programm initialisiert, indem die Oberfläche aufgebaut und die Datenstrukturen geladen werden. In der zweiten Phase tritt das Programm in den Event-Loop ein, in dem es dann auf bestimmte Ereignisse wartet. Tritt nun eines dieser Ereignisse ein, werden die sogenannten Eventhandler aufgerufen, die dann den entsprechenden Programmcode für das jeweilige Ereignis ausführen, um dann anschließend wieder zum Event-Loop zurückzukehren.
Die grafischen Elemente, aus denen die Oberfläche unter Tcl/Tk besteht, werden als Widgets bezeichnet. Es gibt sie in verschiedenen Typen, den Widgetklassen. Zur Zeit stehen unter Tk folgende Klassen zur Verfügung:
Zum einen handelt es sich hierbei um genormte, aber konfigurierbare Grafikobjekte im ,,MOTIF-Look-and-Feel`` Stil, zum anderen sind sie schon mit vielerlei Funktionalität ausgestattet. So ist zum Beispiel die Widgedklasse ,,Text`` bereits mit Editierfähigkeiten ausgestattet. Aus diesen Widgedklassen lassen sich nun, verbunden mit einer Hierarchie, leicht Programme zusammenstellen. Dazu nun das folgende Beispiel eines Editors:
# Aufruf der Tk-Windowingshell
#!/usr/local/bin/wish -f
# der Fensterhintergrund .mem fuellt das ganze Fenster aus
frame .mem -relief raised -bd 3
pack .mem -side top -fill x
# das Menue .mem.file wird als Kind von .mem auf der linken Seite
# plaziert
menubutton .mem.file -text "Datei " \
-relief raised -menu .mem.file.m -underline 0
pack .mem.file -side left
# fuege 4 Menuepunkte .mem.file.m als Kinder von .mem.file hinzu
menu .mem.file.m
.mem.file.m add command -label "Neu" -command {erneuern}
.mem.file.m add command -label "Laden" -command {lesen}
.mem.file.m add command -label "Speichern" -command {schreiben}
.mem.file.m add command -label "Ende" -command exit
# die Scrollbar .s wird rechts ueber die ganze Hoehe plaziert
# das Editierfenster .t fuellt dann den Rest des Fensters aus
scrollbar .s -command ".t yview"
text .t -yscroll ".s set" -relief sunken
pack append . .s {right filly} .t {left expand fill}
# Prozedur zum Lesen einer Datei
proc lesen {} {
loeschen
erneuern
toplevel .laden
frame .laden.fr
entry .laden.fr.o -width 26 -relief sunken \
-textvariable arbeitsfile
label .laden.fr.label1 -text "Laden von:"
pack .laden.fr
pack .laden.fr.label1 -side top
pack .laden.fr.o -side bottom
grab .laden.fr.o
bind .laden.fr.o <Return> {extract; destroy .laden}
}
# Prozedur zum Schreiben einer Datei
proc schreiben {} {
toplevel .speichern
frame .speichern.fr
entry .speichern.fr.o -width 26 -relief sunken \
-textvariable arbeitsfile
label .speichern.fr.label1 -text "Speichern unter:"
pack .speichern.fr
pack .speichern.fr.label1 -side top
pack .speichern.fr.o -side bottom
grab .speichern.fr.o
bind .speichern.fr.o <Return> {save; destroy .speichern}
}
# das eigentliche Lesen mit 'cat'
proc extract {} {
global arbeitsfile
.t insert end [exec cat $arbeitsfile]
}
# das eigentliche Schreiben mit 'echo'
proc save {} {
global arbeitsfile
exec echo [.t get 1.0 end] > $arbeitsfile
}
# den Inhalt der Variablen 'arbeitsfile' mit leerer Eingabe
# ueberschreiben
proc loeschen {} {
global arbeitsfile
set arbeitsfile ""
}
# Editierfenster loeschen und anschliessend neu aufbauen
proc erneuern {} {
destroy .t
text .t -yscroll ".s set" -relief sunken
pack append . .t {left expand fill}
}
Nach dem Programmstart, ein Tcl/Tk Programm läßt sich wie ein Skriptfile aufrufen, sieht das Editorfenster dann so wie in der Abbildung 6 aus.

Abbildung 6: Editorfenster nach dem Programmaufruf
Ein großer Nachteile von Tcl/Tk ist die vergleichsweise unübersichtliche Syntax. Da Anweisungen nicht durch ein Semikolon, wie bei anderen Programmiersprachen gebräuchlich, sondern durch einen Zeilenumbruch getrennt werden, läßt sich dieser bei Bedarf durch einen Backslash aufheben, was die Lesbarkeit des Programmcodes nicht gerade erhöht. Deshalb wird zur Zeit eine Erweiterung zu Tcl/Tk entwickelt, ein sogenannter Interface Builder, der diese Sprache um eine grafische Oberfläche ergänzt, mit der dann Programme im Baukastenprinzip erstellt werden können.