0

我只是想Radiobutton使用tkinter. 每次用户选择具有该名称的任何内容时,我都想在其中更改/替换“选择您的浇头” Label( )。因此,我面临的错误不是替换该标签,而是在下方创建一个新标签,即使我使用的是全局.myLabelRadiobuttonRadiobuttonLabel

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()

我的代码输出的图像在这里

4

1 回答 1

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()

您不需要使用按钮,只需将变量设置为textvariableforLabel就可以了

于 2021-11-01T09:21:15.367 回答