2012-05-01 175 views
7

我試圖在等待5秒後刪除文本框內的文本,但是相反,程序不會運行,並且確實會睡眠一切。也有一種方法讓我只是讓我的文本框睡覺,所以我可以運行其他代碼,而文本被凍結?Python time.sleep

from time import time, sleep 
from Tkinter import * 

def empty_textbox(): 
    textbox.insert(END, 'This is a test') 
    sleep(5) 
    textbox.delete("1.0", END) 

root = Tk() 

frame = Frame(root, width=300, height=100) 
textbox = Text(frame) 

frame.pack_propagate(0) 
frame.pack() 
textbox.pack() 

empty_textbox() 

root.mainloop() 
+1

我沒有與使用TKinter太多的經驗,但我敢肯定,你需要或者使用某種事件循環或中單獨的線程。 – sberry

+1

@sberry:絕對不是線程,並且已經有一個事件循環運行。這可以通過使用'after'來解決,這會在將來某個時間將事件放入隊列中進行處理。 –

回答

11

你真的應該使用類似的Tkinter的after method而非time.sleep(...)

在這個other stackoverflow question有一個使用after方法的例子。

這是你的腳本的修改版本,它使用之後方法:

from time import time, sleep 
from Tkinter import * 

def empty_textbox(): 
    textbox.delete("1.0", END) 

root = Tk() 

frame = Frame(root, width=300, height=100) 
textbox = Text(frame) 

frame.pack_propagate(0) 
frame.pack() 
textbox.pack() 

textbox.insert(END, 'This is a test') 
textbox.after(5000, empty_textbox) 

root.mainloop() 
+1

謝謝你它幫助了很多 – Crispy