【问题标题】:Button Colour Doesn't Change in Function (Python tkinter)按钮颜色不会改变功能(Python tkinter)
【发布时间】:2014-10-26 07:21:25
【问题描述】:

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

提前致谢(对于错误的变量名,我们深表歉意)。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

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

    您需要拨打updateupdate_idletasks强制更新:

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

    顺便说一句,使用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'})
    

    【讨论】:

    • 是的,这行得通,我应该首先尝试after,但是很好的答案谢谢!
    猜你喜欢
    • 2018-04-19
    • 2018-05-17
    • 2018-11-12
    • 1970-01-01
    • 2017-02-22
    • 2016-05-18
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    相关资源
    最近更新 更多