Python Tkinter触发变色后的按钮如何恢复原有背景色
Tkinter按钮触发变色后自动恢复方案
失效原因
使用sleep没有效果是因为Tkinter为单线程事件驱动模型,sleep会直接阻塞UI渲染线程,界面不会更新中间的红色状态,阻塞结束后会直接执行改回白色的逻辑,因此看不到变色过程。
修复方案
使用Tkinter自带的after()方法实现延迟执行,该方法不会阻塞UI线程,会在指定毫秒数后自动调用回调函数完成颜色恢复。
修改后的代码如下:
def clickedButton(event, number, button): global outputCalc outputCalc.config(text = number) # 读取按钮原始背景色,无需硬编码适配更多场景 original_bg = button.cget("bg") button.configure(bg = "red") # 200毫秒后恢复原背景色,可根据视觉需要调整时长 button.after(200, lambda: button.configure(bg=original_bg)) numbers1Button = Button(root, text="1", padx=90, pady=90, bg='#FFFFFF', activebackground='#D9D9D9') numbers1Button.bind('<Button-1>', lambda event: clickedButton(event, 1, numbers1Button)) root.bind('<Key-1>', lambda event: clickedButton(event, 1, numbers1Button))
更简便的原生方案
如果仅需要鼠标点击时的按压效果,你代码中已经配置的activebackground参数本身就可以实现:鼠标点击按钮未松开时,按钮会自动显示你设置的#D9D9D9颜色,无需额外写逻辑。只有需要适配键盘触发的按压视觉效果时,才需要用到上面的after方案。
内容的提问来源于stack exchange,提问作者user16610513
相关产品推荐
相关产品推荐

