nächste Seite: Literatur
vorherige Seite: Bestandteile des X-Window-Systems


Programmieren unter X-Windows

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.

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



nächste Seite: Literatur
vorherige Seite: Bestandteile des X-Window-Systems


Thorsten Schlump
Tue Jun 27 23:03:15 MEST 2000