Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594

Сделать пункт меню Tkinter - неактивным

04.02.2025, 22:58. Показов 2179. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
- Есть простой пример Окна с Меню (смотреть ниже):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from tkinter import *
 
 
def on_push():
    print("***  on_push  ***")
 
 
# (Основное Окно)
root = Tk()
root.geometry("200x200+600+250")
root.resizable(False, False)
root.config(bg='light gray')
 
# (Меню)
main_menu = Menu(root)
root.config(menu=main_menu)
 
# (создание Пунктов Выпадающего Меню-File)
menu_file = Menu(main_menu, tearoff=0)  # (tearoff=0 - отключает возможность открепления подменю)
menu_file.add_command(label="Открыть...")
menu_file.add_command(label="Новый")
menu_file.add_command(label="Сохранить...")
menu_file.add_separator()  # (добавляет разделитель)
menu_file.add_command(label="Выход")
 
# (создание Пунктов Выпадающего Меню-Help)
menu_help = Menu(main_menu, tearoff=0)
menu_help.add_command(label="Помощь")
menu_help.add_command(label="О программе")
 
# (создание Выпадающих Меню)
main_menu.add_cascade(label="Файл", menu=menu_file)
main_menu.add_cascade(label="Справка", menu=menu_help)
 
# (Клавиша)
btn = Button(root, text='not active', bg='light blue', font="Arial 12 bold", command=on_push)
btn.place(width=100, height=25, x=50, y=160)
 
root.mainloop()
- Никак не найду на форуме информацию о том, как в обработчике нажатия на Клавишу-'on_push' сделать Пункт
'menu_file' "Новый" - DISABLED ? Как добраться до пункта меню "Новый"?
Помогите пожалуйста советом или документацией.
Заранее благодарен!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.02.2025, 22:58
Ответы с готовыми решениями:

Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter?
Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter? Я пишу приложение на kivy но использую ...

Как в tkinter сделать радиокнопку неактивной? Не простую кнопку, а радиокнопку. config(state='disabled') не срабатывает
from tkinter import * def change(): if var.get() == 0: label_out.config(text='Не правильно. 1939') ...

Как сделать неактивным пункт меню, содержащий несколько подпунктов в себе
Подскажите как правильно сделать неактивным пункт меню, содержащий несколько подпунктов в себе, наблюдается странный эффект при таком коде ...

7
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
05.02.2025, 02:19
Лучший ответ Сообщение было отмечено Catstail как решение

Решение

Цитата Сообщение от Staut Посмотреть сообщение
'menu_file' "Новый" - DISABLED ? Как добраться до пункта меню "Новый"?
Python
1
2
3
...
menu_file.add_command(label="Новый",state='disabled')
...
2
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
05.02.2025, 09:23  [ТС]
- Простите YuS_2, Вы не заметили, в моем Меню УЖЕ ЕСТЬ пункт-"Новый".
А ваш код, если его поместить в обработчик Клавиши-'on_push', при каждом нажатии на Клавишу
добавляет в Меню ЕЩЕ ТАКОЙ ЖЕ пункт (под тем же именем - "Новый")!
Второй! Третий, и т.д.
- Мне нужно, чтобы при нажатии на Клавишу - СТАРЫЙ (УЖЕ ИМЕЮЩИЙСЯ) пункт "Новый" делался - DISABLED!
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
05.02.2025, 11:08
Лучший ответ Сообщение было отмечено Staut как решение

Решение

Цитата Сообщение от Staut Посмотреть сообщение
Никак не найду на форуме информацию о том, как в обработчике нажатия на Клавишу-'on_push' сделать Пункт
'menu_file' "Новый" - DISABLED ?
прочитал ещё раз... видимо, требуется не просто disable пункта меню, а нажатием по кнопке менять его состояние? Если да, то примерно так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from tkinter import *
 
def on_push(cl):
    if check.get() == 1:
        cl.entryconfigure(1, label="Новый",state='normal')
        check.set(0)
    else:
        cl.entryconfigure(1, label="Новый",state='disabled')
        check.set(1)
    print("***  on_push  ***")
 
# (Основное Окно)
root = Tk()
root.geometry("200x200+600+250")
root.resizable(False, False)
root.config(bg='light gray')
 
check = IntVar()
check.set(1)
 
# (Меню)
main_menu = Menu(root)
root.config(menu=main_menu)
 
# (создание Пунктов Выпадающего Меню-File)
menu_file = Menu(main_menu, tearoff=0)  # (tearoff=0 - отключает возможность открепления подменю)
menu_file.add_command(label="Открыть...")
menu_file.add_command(label="Новый",state='disabled')
menu_file.add_command(label="Сохранить...")
menu_file.add_separator()  # (добавляет разделитель)
menu_file.add_command(label="Выход")
 
# (создание Пунктов Выпадающего Меню-Help)
menu_help = Menu(main_menu, tearoff=0)
menu_help.add_command(label="Помощь")
menu_help.add_command(label="О программе")
 
# (создание Выпадающих Меню)
main_menu.add_cascade(label="Файл", menu=menu_file)
main_menu.add_cascade(label="Справка", menu=menu_help)
 
# (Клавиша)
btn = Button(root, text='enable-disable', bg='light blue', font="Arial 10 bold", command=lambda: on_push(menu_file))
btn.place(width=150, height=25, x=25, y=160)
 
root.mainloop()
Добавлено через 1 минуту
Цитата Сообщение от Staut Посмотреть сообщение
- Мне нужно, чтобы при нажатии на Клавишу - СТАРЫЙ (УЖЕ ИМЕЮЩИЙСЯ) пункт "Новый" делался - DISABLED!
Вот теперь понятнее
смотрите выше код
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
05.02.2025, 12:04  [ТС]
Лучший ответ Сообщение было отмечено YuS_2 как решение

Решение

- Спасибо ОГРОМАДНОЕ YuS 2! Сразу же вопрос. Где Вы прочитали о методе 'entryconfigure()'?
Просмотрел много учебников и курсов. Всюду учат, как ДЕЛАТЬ Меню Tkinter. Нигде не учат, как РАБОТАТЬ
с Меню Tkinter!
- Мой вопрос Темы по-другому (и более правильно) можно было бы назвать -
"Как делать АКТИВНЫМИ и НЕАКТИВНЫМИ пункты Меню Tkinter".
- Я практически ничего не нашел на форуме по этому вопросу. Думаю эта Тема будет полезна многим
работающим с Меню Tkinter.
- Вот последний вариант моего примера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from tkinter import *
 
 
def on_push():
    # print("***  on_push  ***")
 
    if check.get() == 1:
        menu_file.entryconfigure(1, label="Новый", state='normal')
        check.set(0)
    else:  # (check == 0)
        menu_file.entryconfigure(1, label="Новый", state='disabled')
        check.set(1)
 
 
# (Основное Окно)
root = Tk()
root.geometry("200x200+600+250")
root.resizable(False, False)
root.config(bg='light gray')
 
# (ключ Активирования/Диз-Активирования)
check = IntVar()
check.set(0)
 
# (Меню)
main_menu = Menu(root)
root.config(menu=main_menu)
 
# (создание Пунктов Выпадающего Меню-File)
menu_file = Menu(main_menu, tearoff=0)  # (tearoff=0 - отключает возможность открепления подменю)
menu_file.add_command(label="Открыть...")
menu_file.add_command(label="Новый")
menu_file.add_command(label="Сохранить...")
menu_file.add_separator()  # (добавляет разделитель)
menu_file.add_command(label="Выход")
 
# (создание Пунктов Выпадающего Меню-Help)
menu_help = Menu(main_menu, tearoff=0)
menu_help.add_command(label="Помощь")
menu_help.add_command(label="О программе")
 
# (создание Выпадающих Меню)
main_menu.add_cascade(label="Файл", menu=menu_file)
main_menu.add_cascade(label="Справка", menu=menu_help)
 
# (Клавиша)
btn = Button(root, text='not active/active', bg='light blue', font="Arial 12 bold", command=on_push)
btn.place(width=150, height=25, x=25, y=160)
 
root.mainloop()
Еще раз спасибо YuS_2 и Catstail!
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
05.02.2025, 13:03
Цитата Сообщение от Staut Посмотреть сообщение
Где Вы прочитали о методе 'entryconfigure()'?
не поверите, в самом питоне
после создания меню, можно посмотреть какие методы доступны:
Python
1
dir(menu_file)
по смыслу названия ищем подходящий... если ничего не находим, тогда уже надо будет углубляться в документацию... но тут было легко:
Python
1
help(menu_file.entryconfig)
а там:
Help on method entryconfigure in module tkinter:

entryconfigure(index, cnf=None, **kw) method of tkinter.Menu instance
Configure a menu item at INDEX.
- index индекс пункта меню, а **kw явно принимает кучу параметров для того, чтобы можно было вносить изменения...
Ну и при необходимости, ищем у гугля более полное описание, если интересно.

Добавлено через 9 минут
Вот, например, хорошая документация:
TkDocs
а там поиском по странице найдёте то, что требовалось "disabled"
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
05.02.2025, 13:56  [ТС]
- Еще раз Спасибо Yus_2! Еще не пробовал искать "подсказки" через dir и help. Буду иметь в виду.
- Действительно есть в dir() два метода - entryconfig() и entryconfigгку(). Кстати, в моем примере работают оба одинаково
хорошо.
- Спасибо за Доку, буду читать и разбираться.
Если кому будет интересно, самый последний вариант моего примера:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
from tkinter import *
 
 
def on_push():
    # print("***  on_push  ***")
 
    if active_key.get():  # (если управляемый Пункт Меню - АКТИВЕН ...)
        btn.config(text='active')
        menu_file.entryconfig(1, label="Новый", state=DISABLED)
        active_key.set(False)
    else:  # (active_key == False) (если управляемый Пункт Меню - НЕ АКТИВЕН ...)
        btn.config(text='not active')
        menu_file.entryconfig(1, label="Новый", state=NORMAL)
        active_key.set(True)
 
 
# (Основное Окно)
root = Tk()
root.geometry("200x200+600+250")
root.resizable(False, False)
root.config(bg='light gray')
 
# (ключ Активности/Не-Активности Пункта Меню "Новый")
active_key = BooleanVar()
active_key.set(True)  # (сейчас - Активен)
 
# (Меню)
main_menu = Menu(root)
root.config(menu=main_menu)
 
# (создание Пунктов Выпадающего Меню-File)
menu_file = Menu(main_menu, tearoff=0)  # (tearoff=0 - отключает возможность открепления подменю)
menu_file.add_command(label="Открыть...")
menu_file.add_command(label="Новый")
menu_file.add_command(label="Сохранить...")
menu_file.add_separator()  # (добавляет разделитель)
menu_file.add_command(label="Выход")
print(dir(menu_file))  # ->
 
# (создание Пунктов Выпадающего Меню-Help)
menu_help = Menu(main_menu, tearoff=0)
menu_help.add_command(label="Помощь")
menu_help.add_command(label="О программе")
 
# (создание Выпадающих Меню)
main_menu.add_cascade(label="Файл", menu=menu_file)
main_menu.add_cascade(label="Справка", menu=menu_help)
 
# (Клавиша)
btn = Button(root, text='not active', bg='light blue', font="Arial 12 bold", command=on_push)
btn.place(width=150, height=25, x=25, y=160)
 
root.mainloop()
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
05.02.2025, 14:48
Цитата Сообщение от Staut Посмотреть сообщение
menu_file.entryconfig(1, label="Новый", state=DISABLED)
Кстати, тут этикетку необязательно упоминать... конфигурацию код получает по индексу в меню, либо можно по названию этикетки:
Python
1
.entryconfigure("Новый",state='normal')
чтобы не ошибиться в номерах индексов
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.02.2025, 14:48
Помогаю со студенческими работами здесь

Как сделать окно tkinter неактивным по нажатии на него. Оверлей на Tkinter
Здравствуйте. Пытаюсь сделать оверлей на tkinter, поскольку многие модули из интернета нерабочее на моем ПК. Уже все готово, кроме одной...

Сделать неактивным меню верхнего уровня
Здравствуйте. Начинаю писать на WinAPI, первое приложение, так что здесь совсем новичок. Хотел узнать, можно ли как-то сделать...

При нажатии на пункт меню скрыть его, и показать другой пункт меню
Прошу помощи, как можно допустим при нажатии на пункт меню, его скрыть, и показать другой пункт меню? я делаю так : public boolean...

Как сделать так, чтобы после нажатия на пункт меню страница прокручивалась до якоря и меню закрывалось?
Привет всем, у меня есть html код страницы со вставками javascript кода. Имеется два javascripta, один отвечает за прокрутку страницы к...

Сделать пункт меню мигающим
http://image.************/image/b21b968f8f644c51b45bc815d602bcec.png Как один выбранный пункт в меню сделать мигающим? Или хотя бы другого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru