Tk - Grundlagen

Tk erweitert Tcl um Werkzeuge zur Erstellung graphischer Oberflächen. Es besteht im wesentlichen aus folgenden Komponenten: Das Prinzip ist einfach: Mit dem entsprechenden Widgetkommando wird ein neues Widget-Objekt erzeugt, das alle Optionen enthält und wie ein Kommando agieren kann:
canvas .c -width 100 -height 100
grid .c -row 0 -column 0
.c create oval 2 2 97 97 -fill yellow -outline black
.c create oval 27 38 31 42 -fill black
.c create oval 67 38 71 42 -fill black
.c create arc 15 15  84 84 -start 225 -extent 90 -style arc -width 2
Und als Plugin:

Ein Beispiel für ein User-Interface:

  button .b -text "Hallo" -command {incr i; set entry "Klick $i"}
  .b config -background green
  entry .e -textvariable entry
  grid .b -row 0 -column 0
  grid .e -row 1 -column 0
  set i 0
Plugin:

Widgetnamen

Widgetnamen beginnen immer mit einem Punkt. Wird ein Widget in ein Containerwidget eingefügt, so bildet sich sein Name aus der Folge von Containerwidget und neuem Widget: .container.widget. Das Hauptfenster einer Applikation hat den Namen . (Punkt).

Übersicht der Widgets

Container

Darstellungswidgets

Weitere Widgets wie ComboBox oder TreeView werden von Erweiterungen angeboten oder direkt in der Anwendung programmiert. Da das Canvas objektorientiert arbeitet, sind einfach Manipulationen möglich.

Wichtige Dialoge, wie Filemenü oder Messagebox, sind durch Zusammensetzen von Einzelwidgets bereits realisiert und können in Anwendungen genutzt werden.

Anordnung der Widgets

Ein starres Anordnen der Widgets wie unter Windows üblich ist oft nicht sinnvoll, da aufgrund verschiedener Bildschirmauflösungen die Fenster verschieden groß gewünscht werden oder über Ressourcen andere Schriften ausgewählt werden, so daß die starre Größe nicht mehr paßt. Deshalb werden meist Layoutmanager benutzt, die die Beziehungen der einzelnen Komponenten untereinander beschreiben.

Tcl stellt drei Layoutmanager zur Verfügung: place (starre Anordnung), pack (Anordnung bzw. der Ränder) und grid (Anordnung in einem Gitter). Der letzte ist am einfachsten zu bedienen:

  grid .widget -row 1 -column 0
Mit den Optionen -rowspan bzw. -columnspan können Widgets über mehrere Felder ausgedehnt werden.

Beispiel: grid.tcl: