Tcl 更新菜单

Tcl 更新菜单,tcl,ttk,bwidget,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}]] la

我正在寻找如何更新我的应用程序的菜单。我使用了
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

如何使用大型机更新菜单?实际上,显示的菜单是
descmenu1

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

您似乎可以通过销毁现有菜单并使用内部的
\u create\u menubar
过程解析新菜单列表来强制它重新定义菜单。但是,如果你必须开始使用内部方法,也许你应该考虑这样做。普通Tk顶级会公开菜单小部件树,供您根据需要进行操作。可能BWidget大型机在这方面并没有真正帮助您

演示
谢谢,当我单独尝试时,没关系,但我正在使用OO tcl(面向对象),内部函数
\u create\u menubar
没有被识别。当我厌倦了使用
destroy.menubar
菜单时,程序停止在
destroy.menubar
菜单未被销毁!是的,它能工作!!很抱歉,我没有使用正确的顶级菜单,非常感谢您Hello,有没有可能隐藏菜单而不是销毁它?我正在使用笔记本,每个标签都有不同的菜单。感谢您没有使用BWidget大型机。此小部件旨在创建标准应用程序窗口,并期望控制应用程序菜单栏。如果您想控制每个选项卡的子菜单,那么您应该停止使用BWidget并使用适当的Tk菜单。然后,您可以在代码中创建菜单,并根据需要附加或分离菜单树。请在使用它们之前尝试查看标记说明。与标记相关的大型机与您的大型机具有相同的字母表字母,但在那里相似性停止了。我已编辑以删除标记。
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" {}}
    }
}