按钮颜色不会改变功能(Python tkinter)

时间:2014-10-26 07:21:25

标签: python python-3.x tkinter

我有一个在按键上调用的函数,它将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()

提前谢谢(对不好的变量名称感到抱歉)。

1 个答案:

答案 0 :(得分:1)

在回调返回之前,更改不会生效。

您需要致电updateupdate_idletasks以强制更新:

def flash(event):
    b.config(bg = 'orange')
    b.update_idletasks()
    sleep(1)
    b.config(bg='green')

BTW,使用time.sleep,UI不会响应。考虑使用after(另一个好处:无需拨打updateupdate_idletasks):

def flash(event):
    b.config(bg='orange')
    b.after(1000, lambda: b.config(bg='green'))
    # OR  b.after(1000, b.config, {'bg': 'green'})