如何禁用 tkinter 的 OptionMenu

4
我不知道或找不到如何禁用tkinter OptionsMenu。 我的GUI中有3个OptionsMenu,当单击按钮时,我想要禁用它们。
self.menu = OptionMenu(self, var, *items)
btn = Button(self, text="disable", command = self.disable)
btn,pack()

self.disable(self):
    //Disable menu here...

有没有一种方法可以只调用OptionMenu的内置函数并禁用它?还是我必须禁用菜单中的每个选项?(我也无法弄清楚)
顺便说一句:我在一个单独的Topleve()窗口中使用了menu.pack(),但我最初在我的主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)

这个方法不起作用的原因是因为我必须在创建后附加它。我不知道为什么设置无法传递,但我必须这样做: makeMenu(): menu = OptionMenu(self, var, *items) ....//很多菜单设置 return menu

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

makeMenu()

通过这个改变,我以后可以使用这个来禁用菜单:

for menu in all_menus:
   menu.config(state=DISABLED)

可能是重复的问题:如何禁用父窗口中的所有用户输入小部件(按钮、输入框等)?(链接:https://dev59.com/933aa4cB1Zd3GeqPe5Ce) - Aran-Fey
关闭。但这与OptionMenu的工作方式有些不同。我用那个问题来输入条目。它有效!但不幸的是,对于OptionMenu,它无效。还是谢谢你提醒我! - E. Oregel
我已经测试过了,它可以在选项菜单上正常工作。诚然,没有视觉提示,但如果您单击禁用的选项菜单,将不会发生任何事情。 - Aran-Fey
好的,我再试一次。如果还是不行,我会将我的尝试作为编辑发布在上面。 - E. Oregel
如果不够清楚,"父窗口小部件"不是OptionMenu。OptionMenu没有子小部件。我认为您的3个OptionMenus是某个容器的子级。 - Aran-Fey
它起作用了@Rawing!!!!!! 谢谢! - E. Oregel
1个回答

13

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

self.menu.configure(state="disabled")

上述方法适用于 tkinter 和 ttk 的 OptionMenu 组件。


2
顺便说一句,由于某种原因,另一个状态被称为“active”,而不是“enabled” ‍♂️ - TheTomer
@TheTomer:有效的状态包括激活、正常和禁用。 - Bryan Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接