簡體   English   中英

按鈕顏色在功能上不變(Python tkinter)

[英]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()

在此先感謝您(並為錯誤的變量名感到抱歉)。

更改將在回調返回之前生效。

您需要調用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'})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM