Как я могу изменить состояние меню с помощью кнопки внутри tkinter? - PullRequest
0 голосов
/ 10 октября 2019

Хочу сделать конвертер единиц в ткинтер. Я сделал два выпадающих меню;первый позволяет пользователю выбрать единицу, из которой он хочет преобразовать, а второй позволяет ему выбрать единицу, в которую он хочет преобразовать. Я хочу отключить все опции, которые не имеют смысла во втором меню после того, как они выбрали опцию в первом (если они хотят конвертировать килограммы, не имеет смысла выбирать сантиметры во втором меню)

Я пытался использовать StringVar () для изменения состояния меню, но оно не работает. Я понятия не имею, что делать дальше. Я использую документацию по Tutorialspoint, но не могу найти ничего, что работает (впервые используя tkinter).

import tkinter as tk

root = tk.Tk()
root.geometry('600x600')

my_var = tk.StringVar()
my_var.set('active')

unit_1 = tk.Menubutton(root,text='This is the first menu button',bg='white',activebackground='#2E64FE',activeforeground='#FFFFFF')

menu_1 = tk.Menu(unit_1)
unit_1.config(menu=menu_1)

menu_1.add_command(label='Inches',command= lambda: my_var.set('disabled') )

menu_1.add_command(label='Kilograms')

unit_2 = tk.Menubutton(root,text='This is the second menu button',bg='white',activebackground='#2E64FE',activeforeground='#FFFFFF')

menu_2 = tk.Menu(unit_2)
unit_2.config(menu=menu_2)

menu_2.add_command(label='Centimeters')

menu_2.add_command(label='Pounds',state= my_var.get())

unit_1.place(relx=0.03,rely=0.08,relheight=0.04,relwidth=0.45)
unit_2.place(relx=0.52,rely=0.08,relheight=0.04,relwidth=0.45)

root.mainloop()

Здесь я пытаюсь сделать кнопку «Inches» в первом меню, чтобы отключитьКнопка «Фунты» во втором меню, но когда я нажимаю «Дюймы», с «Фунтами» ничего не происходит.

1 Ответ

0 голосов
/ 11 октября 2019

tk.StringVar() используется для изменения текста чего-либо, например, если вы хотите иметь кнопку с динамическим текстом, вы можете использовать tk.StringVar() для этого.

То, что вы хотите сделать, это нечто другое;Вы хотите изменить конфигурацию метки. Поэтому вам нужно найти элемент и настроить его состояние:

import tkinter as tk

root = tk.Tk()
root.geometry('600x600')

my_var = tk.StringVar()
my_var.set('active')

unit_1 = tk.Menubutton(root,text='This is the first menu button',bg='white',activebackground='#2E64FE',activeforeground='#FFFFFF')

menu_1 = tk.Menu(unit_1)
unit_1.config(menu=menu_1)

menu_1.add_command(label='Inches', command=lambda: disable_pounds())

menu_1.add_command(label='Kilograms', command=lambda: disable_centimeters())

unit_2 = tk.Menubutton(root,text='This is the second menu button',bg='white',activebackground='#2E64FE',activeforeground='#FFFFFF')

menu_2 = tk.Menu(unit_2)
unit_2.config(menu=menu_2)

menu_2.add_command(label='Centimeters')

menu_2.add_command(label='Pounds',state= my_var.get())

unit_1.place(relx=0.03,rely=0.08,relheight=0.04,relwidth=0.45)
unit_2.place(relx=0.52,rely=0.08,relheight=0.04,relwidth=0.45)


def disable_pounds():
    menu_2.entryconfig("Pounds", state="disabled")
    menu_2.entryconfig("Centimeters", state="active")


def disable_centimeters():
    menu_2.entryconfig("Pounds", state="active")
    menu_2.entryconfig("Centimeters", state="disabled")



root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...