更改标签的文字颜色,然后按下按钮更改
问题描述:
我想更改标签的文字颜色,等待几秒钟,然后在按下某个键时将其更改回来。更改标签的文字颜色,然后按下按钮更改
我的最终目标是制作一个完整的屏幕键盘,将突出显示您按下的键。然而,我不能让函数暂停将文本转为蓝色,然后再转换为黑色。我试图用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()
答
你有两个问题。一个是你没有改变颜色,你正在创建一个全新的小部件。要更改颜色,您需要在现有的小部件上使用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
非常感谢你的帮助 –
当你告诉它时会发生'sleep';问题是改变窗口的内容会被推迟到你从你所在的函数中返回。如果你将来需要某些事情发生,使用'root.after'。 – Kevin