我有一个在按键上调用的函数,它将bg
更改为橙色,等待1秒然后将其更改为绿色。问题是按钮只等待一秒钟然后变为绿色。
为什么它会跳过第一个颜色变化(我假设功能贯穿并且颜色变化的视觉方面依赖于返回主循环,即主循环等待并且不会改变(因此按钮颜色也是如此)直到功能结束)?有什么方法(Python 3.3窗口)?
以下是一个例子:
import tkinter as tk
from time import sleep
r = tk.Tk()
l = tk.Label(text = 'press f to make button flash')
l.pack()
b = tk.Button(text = 'useless button')
b.pack()
def flash(event):
b.config(bg = 'orange')
sleep(1)
b.config(bg = 'green')
r.bind("<KeyPress-f>", flash)
r.mainloop()
提前谢谢(对不好的变量名称感到抱歉)。
答案 0 :(得分:1)
在回调返回之前,更改不会生效。
您需要致电update
或update_idletasks
以强制更新:
def flash(event):
b.config(bg = 'orange')
b.update_idletasks()
sleep(1)
b.config(bg='green')
BTW,使用time.sleep
,UI不会响应。考虑使用after
(另一个好处:无需拨打update
,update_idletasks
):
def flash(event):
b.config(bg='orange')
b.after(1000, lambda: b.config(bg='green'))
# OR b.after(1000, b.config, {'bg': 'green'})