脚本
译者按:余修改了部分代码。原文通过在一个框架中填充菜单按钮来手工创建菜单条。
菜单按钮
向 ed.tcl 添加下列脚本,将建立一个菜单条,它有三个菜单项目。
menu .menubar #attach it to the main window . config -menu .menubar # insert some cascade menus .menubar add cascade -label File -underline 0 -menu .menubar.file .menubar add cascade -label Edit -underline 0 -menu .menubar.edit .menubar add cascade -label Find -underline 0 -menu .menubar.find .menubar add cascade -label Help -underline 0 -menu .menubar.help #fill the top menu menubutton .menubar.file -text File -underline 0 -menu .menubar.file.menu menubutton .menubar.edit -text Edit -underline 0 -menu .menubar.edit.menu menubutton .menubar.find -text Find -underline 0 -menu .menubar.find.menu pack .menubar.file .menubar.edit .menubar.find -side left menubutton .menubar.help -text Help -underline 0 pack .menubar.help -side right
使用 Tk 命令 menu 建立一个菜单,并把它配置成作为和顶层窗口相关联的一个水平的主菜单。为每个菜单项目指定选项 -label,-menu 和 -underline。 -underline 选项允许从键盘激发(invoke)菜单不使用鼠标(通过按住 Alt 并键入在窗口中有下划线的字符)。-menu 选项给一个菜单关联上菜单按钮。
执行这个脚本,结果如下:
你现在需要给每个菜单按钮连接上菜单项目,并建立下拉菜单。
向脚本添加如下:
menu .menubar.file
.menubar.file add command -label Open -command OpenFile
.menubar.file add command -label Save -command SaveFile
.menubar.file add command -label "Save As" -command SaveAsFile
.menubar.file add command -label Quit -command exit
menu .menubar.edit
.menubar.edit add command -label Cut -com CutSelection
.menubar.edit add command -label Paste -com PasteSelection
.menubar.edit add command -label Copy -com CopySelection
.menubar.edit add command -label Clear -com {.ed delete 1.0 end}
#create pulldown menus
menu .menubar.file.menu
.menubar.file.menu add command -label Open -command {OpenFile}
.menubar.file.menu add command -label Save -command "SaveFile"
.menubar.file.menu add command -label "Save As" -command {SaveAsFile}
.menubar.file.menu add command -label Quit -command exit
menu .menubar.edit.menu
.menubar.edit.menu add command -label Cut -com CutSelection
.menubar.edit.menu add command -label Paste -com PasteSelection
.menubar.edit.menu add command -label Copy -com CopySelection
.menubar.edit.menu add command -label Clear -com {.ed delete 1.0 end}
在 Tk 中,每个菜单项可以要么是一个命令, 要么是单选(toggle:触发)或复选(check)按钮。每个菜单条目都有一个 -command 选项来关联上如果条目被选择了之后调用的动作。选择一个菜单条目,要在顶端的菜单按钮上按下鼠标左键,保持按住鼠标左键并遍历下拉菜单在目的条目上释放左键。当一个条目被选择了之后,调用它的动作并且收回(unpost)这个菜单。
上面的脚本为"File"(菜单条目有 Open, Save, SaveAs 和 Quit) 和 "Edit" (菜单条目口有 Cut, Paste, Copy 和 Clear )建立下拉菜单。
下面的脚本为标签是"Find Selection"的菜单条目连接上一个级联按钮。所连接的级联菜单允许用户指定查找从在当前插入点"前向" 还是 "后向"进行。
#Find menu menu .menubar.find .menubar.find add cascade -label "Find Selection" \ -menu .menubar.find.fmenu #Find menu menu .menubar.find.menu .menubar.find.menu add cascade -label "Find Selection" \ -menu .menubar.find.menu.fmenu
这里指定 fmenu 为:
menu .menubar.find.fmenu
.menubar.find.fmenu add radiobutton -label Forward \
-com {FindSelection -forwards}
.menubar.find.fmenu add radiobutton -label Backward \
-com {FindSelection -backwards}
menu .menubar.find.menu.fmenu
.menubar.find.menu.fmenu add radiobutton -label Forward \
-com {FindSelection -forwards}
.menubar.find.menu.fmenu add radiobutton -label Backward \
-com {FindSelection -backwards}
添加如下脚本完成剩下的条目:
.menubar.find add command -label "Find and Replace" -com FindValue .menubar.find add command -label "Find Selection and Tag" \ -com TagSelection .menubar.find.menu add command -label "Find and Replace" -com FindValue .menubar.find.menu add command -label "Find Selection and Tag" \ -com TagSelection
译者按:tk_menuBar 早已淘汰,不要继续使用,故忽略。
到菜单条的输入焦点(Focus)
tk_menuBar .menubar .menubar.file .menubar.edit .menubar.find .menubar.help
focus .menubar
对于 Tk 命令 tk_menuBar
与一个菜单条相关联的菜单按钮的次序是必须的,为了使用左右光标键,这个命令按作为参数的菜单的次序标识与每个菜单按钮相关联的菜单。
通过命令 focus 设置菜单条的输入焦点。完成击键(keystroke)和识别键盘遍历需要这样。
你可以添加分隔符来组合条目。通过在虚线上点击,缺省的可把 Tk 菜单分离出来(tear-off)。这被用于捕获象下图这样的菜单: