我想更改标签的文字颜色,等待几秒钟,然后在按一个键时将其更改回来。
我的最终目标是制作一个完整的屏幕键盘,突出显示您按下的键。但是,我无法在将文本变为蓝色,然后变回黑色之间暂停功能。我尝试使用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 :(得分:3)
你有两个问题。一个是你没有改变颜色,你正在创建一个全新的小部件。要更改颜色,您需要在现有小部件上使用configure
方法。
其次,当你打电话给sleep
确切地知道GUI的作用时 - 它就会睡觉。没有代码正在运行,屏幕无法刷新。作为一般经验法则,GUI永远不应该调用sleep。
解决方案是使用use after
来安排将来某些方面的更改:
def key(event):
bg = LabQ.cget("background")
LabQ.configure(background="royalblue")
LabQ.after(2000, lambda color=bg: LabQ.configure(background=color))
此示例没有优雅地处理您在两秒钟内两次键入相同键的情况,但这与在一段时间后如何更改值的核心问题无关