menubutton widgetpath -text Name -menu menupathMenubuttons erzeugt, welche bei Anklicken das durch menupath referenzierte Pull-Down-Menu aufklappen. Das Pull-Down-Menu wird durch
menu widgetpatherzeugt und mit
widgetpath add Commandkönnen Einträge gemacht werden. Mit Command kann dabei die Art des Eintrages spezifiziert werden. Folgende Arten sind möglich:
Benutzer können auch ohne Hilfe der Maus Menüpunkte öffnen und einen gewünschten Eintrag auswählen. Diese Technik wird in Tk Keyboard-Traversal genannt. Dazu wird in einem Menüpunkt ein Zeichen mit der Ressource -underline festgelegt. Drückt der Benutzer dieses Zeichen zusammen mit der Alt-Taste, so wird das darunterliegende Untermenü geöffnet bzw. der dazu passende Menüeintrag aktiviert. Mit den Pfeiltasten kann auf einen beliebigen Eintrag verzweigt, und mit der Return-Taste der ausgewählte Eintrag aktiviert werden. Eine andere Möglichkeit bietet die Funktionstaste F10, mit deren Hilfe direkt der am weitesten links stehende Menüeintrag in der Menüleiste aktiviert wird.
Eine weitere Vereinfachung der Arbeit mit Menüs bringen dem Benutzer sogenannte Tastenkürzel . Das sind spezielle Tastenkombinationen über die direkt ein Menüpunkt aktiviert werden kann, ohne daß das Menü in dem sich der Eintrag befindet geöffnet werden muß. Zu diesem Zweck besitzen Menu-Widgets die Ressource -accelerator, mit der die Tastenkombination, die die entsprechende Aktion auslösen soll, rechts vom Eintrag angezeigt wird (siehe Abbildung Eintrag Kopieren Ctrl-c). Das Setzen der Ressource -accelerator allein reicht nicht aus, um die gewünschte Funktionalität an das Tastenkürzel zu binden. Es muß mit dem bind-Befehl eine entsprechende Verknüpfung zwischen der Tastenkombination und der Funktion erzeugt werden.
Das folgende Beispiel soll diese Regeln verdeutlichen.
#!/usr/bin/wish -f
#-----------------------------------------------------------------#
#
# Programmname : menu.tk
# TK-Version 4.0 TCL-Version 7.4
# Erstellungsatum: Sat May 4 14:21:11 GMT 1996
#
#-----------------------------------------------------------------#
frame .menu -relief raised -borderwidth 1
label .label -text "Menüdemo"
# Pulldown-Menü 'Datei'
menubutton .menu.datei -text "Datei" -menu .menu.datei.m -underline 0
menu .menu.datei.m
.menu.datei.m add command -label "Öffnen" -underline 0 \
-command "puts Öffnen"
.menu.datei.m add command -label "Speichen" -underline 0 \
-command "puts Speichern"
.menu.datei.m add separator
.menu.datei.m add command -label "Ende" -command exit -underline 0
# Pulldown-Menü 'Bearbeiten'
menubutton .menu.bearbeiten -text "Bearbeiten" -underline 0 \
-menu .menu.bearbeiten.m
menu .menu.bearbeiten.m
.menu.bearbeiten.m add command -label "Einfügen" -underline 0 \
-command "puts Einfügen" -accelerator Ctrl+v
.menu.bearbeiten.m add command -label "Kopieren" -underline 0 \
-command "puts Kopieren" -accelerator Ctrl+c
.menu.bearbeiten.m add separator
.menu.bearbeiten.m add cascade -label "Optionen" -underline 0 \
-menu .menu.bearbeiten.m.opt
.menu.bearbeiten.m add cascade -label "Untermenü" -underline 0 \
-menu .menu.bearbeiten.m.sub
# Untermenü mit Optionen
menu .menu.bearbeiten.m.opt
.menu.bearbeiten.m.opt add check -label "Kontrollkästchen 1" -underline 0
.menu.bearbeiten.m.opt add check -label "Kontrollkästchen 2" -underline 1
.menu.bearbeiten.m.opt add separator
.menu.bearbeiten.m.opt add radio -label "Option 1" -underline 7
.menu.bearbeiten.m.opt add radio -label "Option 2" -underline 7
# normales Untermenü zum Spezial-Menü
menu .menu.bearbeiten.m.sub
.menu.bearbeiten.m.sub add command -label "Untermenüeintrag 1" -underline 17
.menu.bearbeiten.m.sub add command -label "Untermenüeintrag 2" -underline 17
.menu.bearbeiten.m.sub add command -label "Untermenüeintrag 3" -underline 17
# Pulldown-Menü 'Hilfe'
menubutton .menu.hilfe -text "Hilfe" -menu .menu.hilfe.m -underline 0
menu .menu.hilfe.m
.menu.hilfe.m add command -label "Über" -underline 0 \
-command {puts "Testprogramm: Arbeiten mit Menüs unter TK"}
bind . <Control-Key-c> {
puts "Kopieren"
}
bind . <Control-Key-v> {
puts "Einfügen"
}
# menü anzeigen
pack .menu -side top -fill x
pack .label -padx 100 -pady 40
pack .menu.datei .menu.bearbeiten -side left
pack .menu.hilfe -side right