2015-11-05 100 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

非常感谢你的帮助 –