如何禁用 tkinter OptionMenu

E. *_*gel 1 python unix tkinter optionmenu

我无法弄清楚或找到如何禁用 tkinter OptionsMenu。我的 GUI 中有 3 个选项菜单,并希望在单击按钮时禁用它们

self.menu = OptionMenu(self, var, *items)
btn = Button(self, text="disable", command = self.disable)
btn,pack()

self.disable(self):
    //Disable menu here...
Run Code Online (Sandbox Code Playgroud)

有没有办法只为 OptionMenu 调用内置函数并禁用它?还是我必须禁用菜单中的每个选项?(我也想不通)

顺便说一句:我使用了menu.pack()一个单独的 Topleve() 弹出窗口,但我从我的主 Tk 窗口中的 grid() 系统开始,由menu.grid(row=0,column=0)

编辑: 所以我忘了提到我有多个 OptionMenus 是由构造函数方法生成的。这是我尝试做但没有奏效的事情:

makeMenu():
    menu = OptionMenu(self, var, *items)
    ....//whole bunch of menu settings
    return menu

menu1 = makeMenu()
all_menus.append(menu)
Run Code Online (Sandbox Code Playgroud)

现在这不起作用的原因是因为我必须在创建后附加它。我不知道为什么设置不结转,但我必须做的是: makeMenu(): menu = OptionMenu(self, var, *items) ....//整个菜单设置返回菜单

makeMenu():
    menu = OptionMenu(self, var, *items)
    ....//whole bunch of menu settings
    all_menus.append(menu)

makeMenu()
Run Code Online (Sandbox Code Playgroud)

通过此更改,我可以稍后使用它来禁用菜单:

for menu in all_menus:
   menu.config(state=DISABLED)
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 7

与任何其他小部件一样,您可以使用该configure方法将状态设置为“已禁用”:

self.menu.configure(state="disabled")
Run Code Online (Sandbox Code Playgroud)

以上将适用于 tkinter 和 ttkOptionMenu小部件。

  • 顺便说一句,由于某种原因,另一种状态被称为“活动”而不是“启用”‍♂️ (3认同)