Каков наиболее эффективный способ установить несколько пунктов меню tkinter в «нормальное» состояние одновременно?

#python #tkinter

Вопрос:

У меня есть меню tkinter, которое выглядит примерно следующим образом, где root-мое главное окно Tk, а f1,f2,g1,g2-функции обратного вызова:

 menubar = Menu(root)

menu1 = Menu(menubar, tearoff=0)
menu1.add_command(label="I do this", command=_f1)
menu1.entryconfig('I do this',state='disabled')

menu1.add_command(label="I do that", command=_f2)
menu1.entryconfig('I do that',state='disabled')
menubar.add_cascade(label='My to do list',menu=menu1)

menu2 = Menu(menubar, tearoff=0)
menu2.add_command(label="You do this", command=_g1)
menu2.entryconfig('You do this',state='disabled')

menu2.add_command(label="You do that", command=_g2)
menu2.entryconfig('You do that',state='disabled')
menubar.add_cascade(label='Your to do list',menu=menu2)

root.config(menu=menubar)
 

Таким образом, есть два спада , menu1 и menu2 у каждого из них есть два варианта. В настоящее время четыре опции отключены.

Каков наиболее эффективный способ установить все четыре параметра в «нормальное»? Я вижу, как это сделать для каждого выпадающего списка, используя простое понимание списка, но есть ли способ сделать это все сразу?

Ответ №1:

Невозможно настроить несколько пунктов меню одновременно. entryconfigure Метод может настраивать только одну вещь за раз.

Тем не менее, существуют способы перебора всех пунктов меню. Например, вот краткое решение для включения всех элементов в двух меню:

 for menu in (menu1, menu2):
    for index in range(menu.index('end') 1):
        menu.entryconfigure(index, state="normal")
 

Ответ №2:

Я не думаю, что есть какой-то способ. Похоже, вам лучше всего было бы делать это по одному. Повторите их, если хотите, — это сэкономит некоторое время на вводе текста.