[英]Button Colour Doesn't Change in Function (Python 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()
在此先感謝您(並為錯誤的變量名感到抱歉)。
更改將在回調返回之前生效。
您需要調用update
或update_idletasks
來強制更新:
def flash(event):
b.config(bg = 'orange')
b.update_idletasks()
sleep(1)
b.config(bg='green')
順便說一句,使用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'})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.