Tkinter实现按钮点击时替换标签内容而非新增标签的方法
解决Tkinter点击按钮重复创建标签的问题
问题核心是每次调用show()函数时,都会新建一个Label组件并执行pack(),导致标签不断累加。要实现“替换旧内容”的效果,只需复用同一个标签组件、更新它的文本内容即可,无需每次创建新标签。
解决方案
提前初始化用于显示结果的标签,点击按钮时仅更新该标签的文本属性:
from tkinter import * from PIL import ImageTk,Image from tkinter import messagebox from tkinter import filedialog root = Tk() root.title('First Window') root.iconbitmap('C:/Users/themr/Downloads/avatar_referee_man_sport_game_icon_228558.ico') root.geometry("400x400") var = StringVar() var.set("Monday") drop = OptionMenu(root, var, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday") drop.pack() # 提前创建结果标签,初始文本为空并完成布局 result_label = Label(root, text="") result_label.pack() def show(): # 仅更新已有标签的文本内容,而非新建标签 result_label.config(text=var.get()) button = Button(root, text="Show Selection", command=show) button.pack() root.mainloop()
原理说明
- 在全局作用域创建
result_label并完成布局,后续不再创建新的标签组件; - 调用
show()时,通过config(text=...)方法修改已有标签的文本,实现内容替换,始终只显示一行结果。
内容的提问来源于stack exchange,提问作者Hasan Abdul Ghaffar
相关产品推荐
相关产品推荐

