#python #tkinter #tkinter-label
Вопрос:
Я просто пытаюсь создать Radiobutton
графический интерфейс с помощью tkinter
. В котором я хочу изменять/заменять «Выберите начинки» Label
( myLabel
) каждый раз, когда пользователь выбирает что-либо Radiobutton
с таким Radiobutton
именем. Итак, ошибка, с которой я сталкиваюсь, заключается в том, что вместо замены этой метки новая метка создается чуть ниже, хотя я использую глобальную Label
.
from tkinter import * root = Tk() Toppings = [ ["Pepperoni", "Pepperoni"], ["Cheese", "Cheese"], ["Mushroom", "Mushroom"], ["Onion", "Onion"] ] pizza = StringVar() pizza.set("Select your toppings") for topping, value in Toppings: Radiobutton(root, text = topping, variable = pizza, value = value). pack(anchor = W) myLabel = Label(root, text = pizza.get()) myLabel.pack() def clicked(value): global myLabel myLabel.grid_forget() myLabel = Label(root, text = value) myLabel.pack() myButton = Button(root, text="CLick me!", command = lambda: clicked(pizza.get())) myButton.pack() root.mainloop()
Ответ №1:
Используйте .config
для настройки определенного параметра виджета (и в любом случае не нужно использовать global
в этом случае) (и объяснение того, почему перезапись не сработала, заключается в том, что вам нужно удалить его из Tcl
вызова .destroy
, если вы хотите сделать это таким образом, но в этом нет необходимости):
def clicked(value): myLabel.config(text=value)
Также я бы предложил следовать PEP 8 и не иметь места вокруг =
, если он используется в аргументах ключевых слов, также должны быть имена переменных snake_case
. И не используйте *
при импорте модуля, импортируйте только то, что вам нужно.
Дальнейшие улучшения:
from tkinter import Tk, Label, Radiobutton, StringVar toppings = [ "Pepperoni", "Cheese", "Mushroom", "Onion" ] root = Tk() topping_var = StringVar(value='Select your topping') for topping in toppings: Radiobutton(root, text=topping, variable=topping_var, value=topping).pack(anchor='w') myLabel = Label(root, textvariable=topping_var) myLabel.pack() root.mainloop()
Вам не нужно использовать кнопку, просто установите переменную как textvariable
для Label
, и все