如何实现点击Tkinter按钮后永久改变其颜色
解决Tkinter按钮点击后永久变色的问题
你用activebackground属性没用是因为它只控制按钮被按住时的临时背景色,松开鼠标就会恢复原样。要实现点击后永久变色,需要给按钮绑定点击事件,在事件触发时直接修改按钮的background(缩写bg)属性。
修改后的完整代码
import tkinter as tk # 补充你原代码遗漏的导入语句 def change_color(event): # 获取被点击的按钮,修改它的背景色为绿色 event.widget.config(bg="green") grd = tk.Tk() grd.title("Bryn's Random Game of Randomness") frame = tk.Frame(grd) grd.rowconfigure(0, weight=1) grd.columnconfigure(0, weight=1) frame.grid(row=0, column=0, sticky="news") grid = tk.Frame(frame) grid.grid(sticky="news", column=0, row=7, columnspan=2) frame.rowconfigure(7, weight=1) frame.columnconfigure(0, weight=1) for x in range(15): for y in range(5): btn = tk.Button(frame) # 绑定鼠标左键点击事件到颜色修改函数 btn.bind("<Button-1>", change_color) btn.grid(column=x, row=y, sticky="news") frame.columnconfigure(tuple(range(15)), weight=1) frame.rowconfigure(tuple(range(5)), weight=1) grd.mainloop()
关键说明
- 新增
change_color函数:通过event.widget获取触发点击事件的按钮,调用config(bg="green")永久修改其背景色。 - 给每个按钮绑定
<Button-1>事件(鼠标左键点击),触发颜色修改逻辑。 - 移除了无效的
activebackground属性,替换为实际修改永久背景色的逻辑。
扩展:实现点击切换颜色
如果需要点击一次变绿、再点击恢复默认样式,可以修改change_color函数:
def change_color(event): btn = event.widget # 判断当前背景色,切换状态 if btn.cget("bg") == "green": btn.config(bg=tk.Button().cget("bg")) # 恢复按钮默认背景色 else: btn.config(bg="green")
内容的提问来源于stack exchange,提问作者RougeDemon
相关产品推荐
相关产品推荐

