tcltk - tk 用代码碎片makemenu
Posted gcxokoa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcltk - tk 用代码碎片makemenu相关的知识,希望对你有一定的参考价值。
测试环境 tcl 8.6.10,tk 8.6.10。
自用的 tcl proc,用来生成以整个预置菜单(并不详细配置菜单项)。代码如下:
proc makemenu {root args} { set me makemenu set mu $root if {![winfo exists $root]} {menu $root} foreach {ty la ex} $args { switch -- $ty { c {$mu add command -label $la} / { if {[lindex $ex 0] eq {~}} { set w $mu.[lindex $ex 1] set ex [lrange $ex 2 end] } {set w $mu.$la} $mu add cascade -label $la -menu [menu $w] $me $w {*}$ex } . {return} - {$mu add separator} default {return} };#switch; } return }
用例:
# makemenu pathName tls...
# tls 部分(分组的不定长参数),三个参数一组,依次表示 typeCh label submenu。
# typeCh 部分,表示菜单项的类型。/ 表示子菜单项、c 表示命令项、- 表示分割线(
# 此时,label 部分和 submenu 部分被忽略)、n 表示 多选按钮 菜单项、
# r 表示 单选按钮 菜单项。
# label 部分,表示菜单项的标签文本。如果 typeCh 是 /,
# label 即表示菜单项的 label,也表示 其子菜单 widget 的 pathName 的 name 部分。
# submenu 的部分,相当于嵌套的 tls,表示 typeCh 部分为 / 时当前项的子菜单。
# 如果,最开始的部分以 ~ 指示 type,submenu 部分必须省略。
# ~ 后的 item 不表示 label 而是,父级菜单项 pathName 的 name 部分(详见下例)。 makemenu .menu {*}{ / file {~ altpathword c open . c save . c {save as} . - - - c close . c exit .} / edit {
c cut .
c copy .
c paste .
/ ex {
c {dup text}
c {dup line}
}
} / help { c about .} } # 效果: # 菜单 widget 生成: # .menu # .menu.altpathword # .edit
# .edit.ex # .help # 菜单结构: # file/ # open # save # save as # --------- # exit # edit/ # cut # copy # paste
# ex/
# dup text
# dup line # help/ # about
以上是关于tcltk - tk 用代码碎片makemenu的主要内容,如果未能解决你的问题,请参考以下文章