我试图在准确的时间内耗费一些labels
,而不是忘记它们。我尝试使用sleep()
和time.sleep()
,但是该程序在我定义并开始执行之后才启动。这是我程序的一部分:
from time import sleep
from tkinter import*
from tkinter import ttk
root = Tk()
root.geometry('700x700+400+100')
root.overrideredirect(1)
myFrame=Frame(root)
label1=Label(myFrame, text='Warning!', font=('Arial Black', '26'), fg='red')
myFrame.pack()
label1.pack()
sleep(10)
myFrame.pack_forget()
label1.pack_forget()
但是,当我运行程序时,它要等待10秒钟,然后执行这些行(
frame
和label
被打包,然后立即忘记)。我希望很清楚,我有什么问题。
最佳答案
使用Tkinter after
方法而不是time.sleep()
,因为time.sleep()
几乎绝不能在GUI中使用。 after
计划在指定时间(以毫秒为单位)后调用一个函数。您可以这样实现:
myFrame.after(10000, myFrame.pack_forget)
label1.after(10000,label1.pack_forget)
请注意,
after
不能确保某个功能会在恰好适当的时间出现,它只是将其安排在一定的时间之后才出现。由于Tkinter是单线程的,因此如果您的应用程序很忙,则可能存在以微秒为单位(最有可能)的延迟。