2015-04-06 40 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是單線程的,因此如果您的應用程序很忙,則可能會有幾微秒的延遲(最可能是)。