Как программно изменить ТЕКСТ Пункта Меню Tkinter?
Всем самого наилучшего! Помогите, пожалуйста, в одном вопросе. Мне нужно, чтобы после очередного нажатия на Пункт Меню, текст этого Пункта Меню - ИЗМЕНЯЛСЯ. Все прекрасно видно из маленького примера:
from tkinter import *
class MainWindow: # Класс - Главного-Окна
# (Основное Окно Игры)
window = Tk()
window.geometry("+550+300") # ("250x150+300+300")
window.resizable(False, False) # Изменение размера окна
# (Для Пункта Меню - Открыть/Закрыть)
MENU_POINT_TEXT = 'Открыть'
MENU_POINT_FLAG = False
def start(self): # вывод - Главного-Окна Игры
self.init_ui() # создание - Главного-Окна Игры
# (Главный-Цикл Игры)
MainWindow.window.mainloop()
def init_ui(self): # создание - Главного-Окна Игры
# (Меню)
menubar = Menu(self.window)
self.window.config(menu=menubar)
# (Пункты Меню)
settings_menu = Menu(menubar, tearoff=0)
settings_menu.add_command(label=MainWindow.MENU_POINT_TEXT, font='Arial 8 bold', command=self.open_close)
# (Выход)
settings_menu.add_separator()
settings_menu.add_command(label='Выход', font='Arial 8 bold', command=self.window.destroy)
menubar.add_cascade(label='Файл', menu=settings_menu)
@classmethod
def open_close(cls):
if not cls.MENU_POINT_FLAG:
# (Открытие)
cls.MENU_POINT_FLAG = True
cls.MENU_POINT_TEXT = 'Закрыть' # (НЕ РАБОТАЕТ !!!)
print('*** ОТКРЫЛИ ! ***') # .....
else:
# (Закрытие)
cls.MENU_POINT_FLAG = False
cls.MENU_POINT_TEXT = 'Открыть' # (НЕ РАБОТАЕТ !!!)
print('*** ЗАКРЫЛИ ! ***') # .....
if __name__ == '__main__':
game = MainWindow()
game.start() # вывод - Окна Игры
Заранее всем спасибо!
Ответы (1 шт):
Автор решения: staut
→ Ссылка
Огромное спасибо Сергею Коху! Это действительно решение моего вопроса. Весь секрет в одной функции - menu.entryconfigure(1, label="Новый текст Пункта-Меню") Приведу малюсенький демонстративный Пример, сделанный на основе Поста, предоставленного Сергеем Кохом:
from tkinter import *
flag = False # Флаг Работы в Обработчике Пункта-Меню (False/True - Открытие/Закрытие)
def clicked(menu_point): # Обработчик Пункта-Меню
global flag
if flag:
# (Закрытие)
flag = False
menu_point.entryconfigure(0, label="Открыть") # (Работает !)
# (.....)
print('*** ЗАКРЫТИЕ ! ***') # .....
else:
# (Открытие)
flag = True
menu_point.entryconfigure(0, label="Закрыть") # (Работает !)
# (.....)
print('*** ОТКРЫТИЕ ! ***') # .....
# (Главное-Окно)
root = Tk()
root.geometry('+700+200')
# (Меню)
menu_bar = Menu(root)
# (Пункт-Меню - File)
file_menu = Menu(menu_bar, tearoff=False)
file_menu.add_command(label='Открыть', command=lambda: clicked(file_menu))
file_menu.add_separator()
file_menu.add_command(label='Выйти')
menu_bar.add_cascade(label="File", menu=file_menu)
root.config(menu=menu_bar)
root.mainloop()
Спасибо всем участвующим в обсуждении! Теперь все работает правильно.