Das zu Tcl gehörende GUI-Toolkit Tk enthält alle Standardwidgets wie Rahmen, Buttons oder Listboxen. Bei vielen Anwendungen kommt aber der Wunsch nach mehr auf. Zusätzliche Widgets wie Tree oder Combobox sind in diversen Erweiterung wie BLT[2] zu finden, die aber als kompilierte Bibliotheken plattformabhängig sind. BWidgets haben diesen Nachteil nicht, sie sind in Tcl/Tk geschrieben und können daher über Plattformgrenzen hinweg zusammen mit der Anwendung verteilt werden.
Die BWidgets basieren auf einer Entwicklung der Firma Unifix und sind inzwischen unter einer BSD-Lizenz bei Sourceforge verfügbar[1]. Nach dem Auspacken des Archivs muss die Erweiterung dem Interpreter bekannt gemacht werden. Das geschieht durch den Bibliothekspfad »auto_path«:
lappend auto_path
[file join //usr local lib BWidget-1.4.1]
Das Archiv enthält neben der eigentlichen Erweiterung auch eine umfangreiche Dokumentation im Unterverzeichnis »BWMan«. Die Schnittstellen ähneln denen der normalen Tk-Widgets, allerdings sind die Widget-Kommandos großgeschrieben.
Widgets gruppieren und anordnen
Einige der BWidgets dienen zur Gliederung von grafischen Oberflächen:
- Notebook (auch Karteireiter genannt)
- Rahmen mit Beschriftung
- Vertikal oder horizontal geteilter Bereich mit veränderbarer Aufteilung
- Bereich zum Scrollen
Das Notebook-Widget (siehe Abbildungen 1a und 1b, häufig auch Tabbed Widget genannt) gibt dem Benutzer die Möglichkeit, zwischen den beschrifteten Karteireitern (Tabs) zu blättern. Das soll die Bedienung intuitiver gestalten. Folgendes Kommando fügt einen neuen Reiter ein:
set frame [$notebook insert end name -text "Beispiel"]
Der neue Frame kann weitere Widgets aufnehmen. Die Reiter lassen sich nicht nur mit der Maus auswählen, auch das Programm kann festlegen, welche Karteikarte oben liegen soll:
$notebook raise name
Reiter lassen sich auch abfragen, sortieren oder löschen. An ihre Grenzen stoßen Notebooks, wenn sie viele Einträge aufnehmen sollen. Je nach Titel der Karten genügt schon bei vier oder fünf Stück der Platz nicht mehr, um alle Reiter gleichzeitig darzustellen. Das Widget blendet dann Knöpfe ein, um in den Reitern zu blättern (Abbildung 2). Darunter leidet die Bedienung erheblich. Als Ausweg bietet sich ein Pages Manager mit einem Menü oder einer Toolbar zum Umschalten an.
Nicht immer muss eine Oberfläche so stark gegliedert sein wie mit einem Notebook. Dezenter ist ein Title Frame, ein Rahmen mit Überschrift wie in Abbildung 1a zu sehen. Tk 8.4 wird jedoch nativ bereits den mächtigeren Label Frame enthalten, er lässt sich einfacher benutzen und bietet mehr Kontrolle über das Aussehen. Man kann sogar beliebige Widgets als Beschriftung einsetzen.
Abbildung 1a: Im Notebook- Widget schaltet der Benutzer zwischen den Karteikarten um.
Abbildung 1b: Die einzelnen Karten nehmen beliebige Widgets auf, auch ein Paned Window.
Abbildung 2: Bei zu vielen Karten stellt das Notebook zwei Pfeile zum Durchscrollen bereit.
Teile und herrsche
Ein gern benutztes GUI-Element sind horizontal oder vertikal geteilte Flächen. Der Benutzer kann dann mit einem Knopf (Sash) bestimmen, welchem Bereich er mehr der knappen Bildschirmoberfläche einräumen will. Hierfür dient das Paned Window. Die Option »-side« bestimmt die Teilungsrichtung und Position des Knopfes, das Teilungsverhältnis wird wie beim »grid«-Kommando mit »-weight« festgelegt. Einem Paned Window lässt sich mit »set frame [$panedWindow add]« ein Bereich hinzufügen, in den neuen Frame kann man die eigenen Widgets packen.