2015-04-06 41 views
1

我试图发泄几个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秒钟,比执行线(framelabel都挤满比立刻忘记了)。

我希望很清楚,我有什么问题。

+0

@DonkeyKong我想显示标签1 10秒,并忘记它。 – Luka1

+0

你当前的代码发生了什么? – miradulo

+0

@DonkeyKong像我说的:10秒它什么都不做,并且执行我写的所有程序(做根,设置它的几何等等),但是label1是(我认为是)打包('.pack'),而不是立即忘记('.pack_forget()')。 – Luka1

回答

2

使用Tkinter after方法而不是time.sleep(),因为time.sleep()几乎从不在GUI中使用。 after安排一个函数在指定的时间后以毫秒为单位被调用。您可以实现这样的:

myFrame.after(10000, myFrame.pack_forget) 
label1.after(10000,label1.pack_forget) 

注意after确保的功能将出现在恰当的时间,但其调度一定的时间后发生。由于Tkinter是单线程的,因此如果您的应用程序很忙,则可能会有几微秒的延迟(最可能是)。