2015-11-05 112 views
2

我想更改標籤的文字顏色,等待幾秒鐘,然後在按下某個鍵時將其更改回來。更改標籤的文字顏色,然後按下按鈕更改

我的最終目標是製作一個完整的屏幕鍵盤,將突出顯示您按下的鍵。然而,我不能讓函數暫停將文本轉爲藍色,然後再轉換爲黑色。我試圖用time.sleep(2),但它似乎這樣做,在該函數的開始,而不是我寫的順序。

from tkinter import * 
import time 

window = Tk() 

window.geometry("1000x700") 

LabQ = Label(window,text="Q",font=("Courier", 30)) 

LabQ.place(x=210,y=260) 

def key(event): 
    LabQ = Label(window,text="Q",fg="ROYALBLUE",font=("Courier", 30)) 
    LabQ.place(x=210,y=260) 
    time.sleep(2) 
    LabQ = Label(window,text="Q",font=("Courier", 30)) 
    LabQ.place(x=210,y=260) 

window.bind("<key>", key) 

window.mainloop() 
+0

當你告訴它時會發生'sleep';問題是改變窗口的內容會被推遲到你從你所在的函數中返回。如果你將來需要某些事情發生,使用'root.after'。 – Kevin

回答

3

你有兩個問題。一個是你沒有改變顏色,你正在創建一個全新的小部件。要更改顏色,您需要在現有的小部件上使用configure方法。

其次,當你調用sleep這正是GUI所做的 - 它睡覺。沒有代碼正在運行,屏幕無法刷新。作爲一般的經驗法則,GUI不應該叫睡眠。

的解決方案是使用使用after安排在未來某個時間點的變化:

def key(event): 
    bg = LabQ.cget("background") 
    LabQ.configure(background="royalblue") 
    LabQ.after(2000, lambda color=bg: LabQ.configure(background=color)) 

這個例子沒有很好地處理,你兩次在兩秒鐘下鍵入相同的密鑰的情況下,但這與經過一段時間後如何改變價值的核心問題無關。

+0

非常感謝你的幫助 –