更新Menu MainFrame tk

时间:2015-06-12 10:41:34

标签: tcl ttk bwidget

我正在寻找如何更新应用程序的菜单。我使用MainFrame来创建它,但我无法更新整个菜单。

set descmenu1 {}

set FileMenuItems1 {}
lappend FileMenuItems1   [list command "f1"  {} "f1" {Ctrl q} -command [list if {[tk_messageBox -message [format "%s ?" "Quit"] -type yesno] eq "yes"} {exit}]]
lappend descmenu1 "&file" all file 0 $FileMenuItems1

set EditMenu {}
lappend EditMenu1   [list command "e1"  {} "e1" {Ctrl q} -command [list if {[tk_messageBox -message [format "%s ?" "Quit"] -type yesno] eq "yes"} {exit}]]
lappend descmenu1 "&Edition" all file 0 $EditMenu1

set descmenu2 {}
set FileMenuItems2 {}
lappend FileMenuItems2   [list command "f2"  {} "f2" {Ctrl q} -command [list if {[tk_messageBox -message [format "%s ?" "Quit"] -type yesno] eq "yes"} {exit}]]
lappend descmenu2 "&file2" all file 0 $FileMenuItems2

set EditMenu2 {}
lappend EditMenu2   [list command "e2"  {} "e2" {Ctrl q} -command [list if {[tk_messageBox -message [format "%s ?" "Quit"] -type yesno] eq "yes"} {exit}]]
lappend descmenu2 "&Edition2" all file 0 $EditMenu2


set mainframe [MainFrame .hull -menu $descmenu1]
.hull configure -menu $descmenu2

如何使用MainFrame更新我的菜单?实际上,显示的菜单是descmenu1

1 个答案:

答案 0 :(得分:0)

您尚未指定此内容,但看起来您使用的是BWidget。 BWidget MainFrame上的-menu选项采用描述菜单层次结构而非菜单小部件的列表。但是,-configure选项不会重新定义菜单。

似乎您可以强制它通过销毁现有菜单并使用内部_create_menubar过程来解析新菜单列表来重新定义菜单。但是,如果您必须开始使用内部方法,也许您应该考虑以其他方式执行此操作。普通的Tk顶级公开了菜单小部件树,供您根据需要进行操作。可能BWidget MainFrame在这里并没有真正帮助你。

演示

package require BWidget
set main [MainFrame .main -menu {
    "&File" {} {} 0 {
        {command "&New" {} "Create new" {}}
        {separator}
        {command "E&xit" {} "Exit app" {}}
    }
}]
destroy .menubar
$main _create_menubar {
    "&Different" {} {} 0 {
        {command "Alternate" {} "Something new" {}}
    }
}