码迷,mamicode.com
首页 > 其他好文 > 详细

【tcltk - tk 用代码碎片】makemenu

时间:2020-01-20 22:45:38      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:多选   依次   单选按钮   proc   word   pen   开始   close   def   

测试环境 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

标签:多选   依次   单选按钮   proc   word   pen   开始   close   def   

原文地址:https://www.cnblogs.com/GCxokoA/p/12218712.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!