Tk (Toolkit)

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Tk

Tcl-Tk universal scripting.svg
Basisdaten

Maintainer Tcl Core Team[1]
Entwickler John Ousterhout
Aktuelle Version 8.6.9[2]
(6. November 2018)
Betriebssystem plattformübergreifend
Programmiersprache C[3]
Kategorie GUI-Toolkit
Lizenz BSD-Lizenz
deutschsprachig nein
www.tcl.tk

Tk ist ein freies, plattformübergreifendes GUI-Toolkit zur Programmierung von grafischen Benutzeroberflächen (GUIs).

Geschichte[Bearbeiten | Quelltext bearbeiten]

Tk wurde von John Ousterhout seit 1988, als Erweiterung für die Scriptsprache Tcl entwickelt, da er jedoch nur nebenbei an der Software arbeitete wurde sie erst 1991 veröffentlicht.[4]

Geschrieben wurde Tk primär für Unix X11, mittlerweile ist es cross-plattform kompatibel und somit auch unter MacOS und Windows lauffähig. Durch die damalige weite Verbreitung von X11-Systemen, primär an Universitäten, wurde die Software schnell bekannt und von einer Vielzahl von Entwicklern benutzt, da sie leichter zu nutzen war als vorhandene Bibliotheken.[5]

1994 ging John Ousterhout zu Sun Labs, wo er ein Team zusammenstellte um an Tcl/Tk zu arbeiten. In dieser Zeit verbreitete sich die Software und Mitte 1994 erschien die erste Version der Python-Bibliothek Tkinter, kurz darauf wurde PerlTk veröffentlicht.[5]

Widgets, die in Anwendungen (z. B. Bäume, Comboboxen, Tabbed Notebooks) häufig verwendet wurden, waren nicht im Tk-Kern verfügbar, sondern nur über mehrere, oft konkurrierende Add-ons. Das wurde in einer, am 20. Dezember 2007 veröffentlichten Version von Tk (8.5.0), mit der Einführung des sogenannten themed widget set geändert. Das bedeutete, dass man Anwendungen ohne großen große Optimierungen und ohne Add-ons erstellten konnte.[5]

Verwendung[Bearbeiten | Quelltext bearbeiten]

Die verbreitete Kombination aus Tcl (Tool Command Language) und dem GUI-Toolkit Tk wird als Tcl/Tk bezeichnet.

Tk eignet sich gut für „quick-and-dirty“-Programmierung und Prototypen, aber auch zur Erstellung von kleinen bis mittleren Programmen für Linux- und Unix-Systeme einschließlich macOS sowie Windows (ab 95). Das Kit wurde für die Programmiersprache Tcl entwickelt und ist von dort aus einfach zu benutzen. Tk ist als freie Software unter einer BSD-artigen Lizenz veröffentlicht.[6]

Sprachanbindungen[Bearbeiten | Quelltext bearbeiten]

Es gibt diverse Sprachanbindungen für Tk, u. a. für folgende Programmiersprachen:

Widgets[Bearbeiten | Quelltext bearbeiten]

Tk stellt die folgenden Oberflächenelemente zur Verfügung:

Des Weiteren sind die folgenden Toplevel-Windows verfügbar

  • tk_chooseColor – Farbselektion
  • tk_chooseDirectory – Ordner-Auswahl
  • tk_dialog – Modaler Dialog
  • tk_getOpenFile – File-Auswahl
  • tk_messageBox – Hinweis-Box
  • tk_popup – Post a popup menu
  • toplevel – Allgemeines Toplevel Window

Geometriemanager[Bearbeiten | Quelltext bearbeiten]

Die Geometriemanager (auch Layoutmanager genannt) von Tk sind pack, grid und place. Die Unterschiede der Geometriemanager:

pack
Widgets werden in den „verbleibenden“ Raum an der Oberseite, links, rechts oder unten angebracht. An der gegenüberliegenden Seite bleibt Platz für weitere Widgets. Hiermit kann man zunächst nur recht einfache Layouts erstellen, aber über die Verwendung von (geschachtelten) Frames können sie auch komplizierter werden. Besonderer Vorteil von pack (und auch grid) ist, dass bei entsprechenden Einstellungen sich das Layout hervorragend an wechselnde Fenstergrößen anpasst.
grid
Teilt den Platz in ein Raster aus Zeilen und Spalten ein, ähnlich von Tabellen in einem Tabellenkalkulationsprogramm. Insbesondere Formulare (linke Spalte Feldnamen, rechte Spalte Eingabefelder) lassen sich hiermit schön erstellen.
place
Ermöglicht völlig freie Anordnung von Widgets auf der Fläche. Großer Nachteil ist, dass die Anordnung dadurch standardmäßig ortsfest ist und sich nicht an wechselnde Fenstergröße anpassen kann. Viele andere Geometriemanager arbeiten aber ebenfalls so, z. B. Formulare bei MS Access.
Jedoch ist eine Anordnung der Widgets mit prozentualen Angaben möglich. Dadurch sind Anpassungen an die Fenstergröße in gewissem Maße möglich.

Komplexere Layouts erreicht man durch Verwenden von (geschachtelten) Frames. In jedem Frame darf nur einer der Geometriemanager verwendet werden, innerhalb einer Anwendung können aber durchaus alle drei vorkommen.

Durch die Unterstützung von Unicode seitens Tcl können auch einfach internationale Zeichen in Tk-Anwendungen verwendet werden.

Ab den Versionen Tcl/Tk 8 wird 'native look and feel' geboten, d. h. bei Mac-Applikationen sitzt die Menüzeile immer am oberen Bildschirmrand, bei Windows und Unix dagegen am oberen Rand des jeweiligen Applikationsfensters. Auch andere Widgets sehen jeweils so aus, wie man es auf den verschiedenen Plattformen gewohnt ist.

Tk ist im Allgemeinen im Lieferumfang von Tcl/Tk enthalten und ist frei verfügbar. Es gibt reichlich Zusatzsoftware, siehe auch Artikel zu Tcl. Bei den meisten Linux-Distributionen ist es vorhanden, für Windows und Mac kann man es kostenlos aus dem Internet laden, auch als Binärversion[7], d. h. man braucht es nicht selbst zu übersetzen.

Beispiele[Bearbeiten | Quelltext bearbeiten]

Ein minimales Zeichenprogramm in Tcl:[8] verwendet wird ein canvas-Widget .c, auf das mit der Maus gezeichnet werden kann. Dazu werden „Bindings“ für die Ereignisse „linker Mausknopf gedrückt“ und „Bewegung mit linkem Mausknopf gedrückt“ vereinbart. Die Prozedur doodle stellt diese Bindungen her:

 proc doodle {w {color black}} {
    bind $w <1>         [list doodle'start %W %x %y $color]
    bind $w <B1-Motion> {doodle'move %W %x %y}
 }

Bei linkem Mausklick wird ein Linienobjekt (dessen Anfangs- und Endpunkt noch zusammenfallen) angelegt:

 proc doodle'start {w x y color} {
    set ::_id [$w create line $x $y $x $y -fill $color]
 }

Bei Mausbewegung wird das aktuelle Linienobjekt um eine Strecke verlängert:

 proc doodle'move {w x y} {
    $w coords $::_id [concat [$w coords $::_id] $x $y]
 }

Das Hauptprogramm ist gerade einmal drei Zeilen lang:

 package require Tk
 pack [canvas .c -bg white] -fill both -expand 1
 doodle .c
 bind .c <Double-3> {%W delete all}

Die letzte Anweisung definiert, dass bei einem Doppelklick auf die rechte Maustaste die Zeichnung gelöscht wird.


Das folgende Beispiel entspricht inhaltlich dem Hallo-Welt-Beispiel im Wikipedia-Eintrag zu Java Swing

# lädt ggf. das Toolkit (bei Ausführung mit der wish entbehrlich)
package require Tk

# setzt den Titel des Hauptfensters
wm title . "Hallo Welt mit Tk"

# fügt "Hallo Welt"-Text hinzu
pack [label .beispielLabel -text "Hallo Welt"] -side left

# setzt die Fenstergröße
wm geometry . 300x200

# Hinweise:
#   - Das Hauptfenster muss nicht erzeugt werden, sondern
#     ist von vornherein da.
#
#   - Das Hauptfenster muss nicht auf "sichtbar" gesetzt
#     werden, sondern ist von vornherein sichtbar.
#
#   - Dem Programm muss nicht beigebracht werden, dass
#     es beim Schließen des Fensters beendet werden
#     soll, weil das die Standardfunktionalität ist.
#
#   - Um ein Event Dispatching muss man sich nicht kümmern.

Weblinks[Bearbeiten | Quelltext bearbeiten]

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Tcl/Tk Core Development. Abgerufen am 16. Juli 2018 (englisch).
  2. Latest Release: Tcl/Tk 8.6.9. (abgerufen am 24. Mai 2019).
  3. The tk Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 18. Juli 2018).
  4. History of Tcl. Abgerufen am 24. Mai 2019 (englisch).
  5. a b c TkDocs: Background. Abgerufen am 24. Mai 2019 (englisch).
  6. tcl.tk/software/tcltk/license.html
  7. tcl.tk – Downloadmöglichkeiten für Tcl/Tk 8.5.10
  8. wiki.tcl-lang.org