Python Tkinter全局Label无法替换 选中Radiobutton后新增标签问题
问题根源
- 你为
myLabel使用了pack()布局,但在移除时调用了仅适用于grid布局的grid_forget()方法,原有标签根本没有被成功移除,新建的Label自然会在原有内容下方新增显示。 - 不需要每次触发操作都销毁重建Label组件,直接修改现有Label的
text属性即可实现内容更新,写法更简单也不会出现布局混乱问题。
修复后代码
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): # 直接修改现有Label的text属性即可,不需要销毁重建 myLabel.config(text=value) myButton = Button(root, text="Click me!", command = lambda: clicked(pizza.get())) myButton.pack() root.mainloop()
可选优化
如果你想要实现选中Radiobutton后立即更新标签,不需要额外点击按钮,可以在创建Radiobutton时添加command参数,直接绑定更新逻辑:
# 把循环创建Radiobutton的代码改成如下即可 for topping, value in Toppings: Radiobutton(root, text = topping, variable = pizza, value = value, command=lambda v=value: myLabel.config(text=v)).pack(anchor = W)
内容的提问来源于stack exchange,提问作者Nlie10
相关产品推荐
相关产品推荐

