更新 Menu MainFrame tk
updating Menu MainFrame tk
我正在寻找如何更新我的应用程序的菜单。我用 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
.
您没有指定它,但看起来您正在使用 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" {}}
}
}
我正在寻找如何更新我的应用程序的菜单。我用 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
.
您没有指定它,但看起来您正在使用 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" {}}
}
}