2012-05-01 76 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