tkinter enable/disable menu
could use below as well... but I want to disable the parent menu, not the items one by one...
self.nMenu[0].entrycget(0, 'label')
self.nMenu[0].entryconfigure('Quit', state=tk.DISABLED)
self.nMenu[0].entryconfigure(0)
You can enable or disable an entire menu by enabling or disabling the item it is connected to.
Here's a contrived example. Use the Test1
menu to enable or disable the Test2
menu.
import Tkinter as tk
class Example(tk.Frame):
def __init__(self, root):
tk.Frame.__init__(self, root)
self.menubar = tk.Menu()
self.test1Menu = tk.Menu()
self.test2Menu = tk.Menu()
self.menubar.add_cascade(label="Test1", menu=self.test1Menu)
self.menubar.add_cascade(label="Test2", menu=self.test2Menu)
self.test1Menu.add_command(label="Enable Test2", command=self.enable_menu)
self.test1Menu.add_command(label="Disable Test2", command=self.disable_menu)
self.test2Menu.add_command(label="One")
self.test2Menu.add_command(label="Two")
self.test2Menu.add_command(label="Three")
self.test2Menu.add_separator()
self.test2Menu.add_command(label="Four")
self.test2Menu.add_command(label="Five")
root.configure(menu=self.menubar)
def enable_menu(self):
self.menubar.entryconfig("Test2", state="normal")
def disable_menu(self):
self.menubar.entryconfig("Test2", state="disabled")
if __name__ == "__main__":
root = tk.Tk()
root.geometry("500x500")
app = Example(root)
app.pack(fill="both", expand=True)
root.mainloop()