无法在 Tkinter 中修改全局标签 python

Cannot modify global Label in Tkinter python

我只是想使用 tkinter 制作一个 Radiobutton GUI。我想在其中 change/replace “Select 你的浇头” Label (myLabel) 每次用户选择 RadiobuttonRadiobutton姓名。因此,我面临的错误不是替换该标签,而是在下面创建一个新标签,即使我使用的是全局 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()

使用 .config 配置特定的小部件选项(在这种情况下不需要使用 global)(以及为什么覆盖它不起作用的解释是因为你需要如果你想这样做但没有必要,可以通过调用 .destroy 将其从 Tcl 中删除):

def clicked(value):
    myLabel.config(text=value)

此外,我建议遵循 PEP 8,如果在关键字参数中使用 space,则不要在 = 周围使用 space,变量名也应在 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()

您不需要使用按钮,只需将变量设置为 Labeltextvariable 即可