通过分离菜单的构造过程,以及菜单与顶层window的绑定,可以灵活地实现不同菜单栏的切换。比如下列代码在打开日记本时创建了一套菜单栏;在关闭日记本菜单执行时,重新绑定了通用菜单栏。
proc gui_diary {topwin} {
wm title $topwin "我的日记本"
$topwin configure -menu [gui_diary_menubar ${topwin}.mbar_diary] ;# 创建日记本的菜单栏
}
proc gui_diary_menubar {mbar} {
# 若组件已经创建就不再重复创建了
if {[winfo exists $mbar]} {
return $mbar
}
menu $mbar
$mbar add cascade -label "文件" -menu $mbar.file
$mbar add cascade -label "视图" -menu $mbar.view
$mbar add cascade -label "编辑" -menu $mbar.edit
$mbar add cascade -label "帮助" -menu $mbar.help
gui_diary_menu_file $mbar.file insert
gui_diary_menu_view $mbar.view insert
gui_diary_menu_edit $mbar.edit insert
gui_diary_menu_help $mbar.help insert
return $mbar
}
proc gui_diary_menu_file {mfile action} {
if {![winfo exists $mfile]} {
menu $mfile
}
$mfile insert 0 command -label "关闭 日记本" -command [list
gui_diary_quit $mfile]
}
}
proc gui_diary_quit {w} {
set topwin [string range $w 0 [expr {[string first "." $w 1] - 1}]]
$topwin configure -menu [gui_general_menubar ${topwin}.mbar_general] ;# 重新绑定通用菜单栏
}
阅读(1698) | 评论(0) | 转发(0) |