2012-05-01 9 views
7

Próbuję usunąć tekst w polu tekstowym po odczekaniu 5 sekund, ale zamiast tego program nie będzie działać i przesypia wszystko inne. Czy istnieje sposób, aby po prostu uśpić mój tekst, aby móc uruchomić inny kod, gdy tekst jest zamrożony?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

Nie mam dużego doświadczenia z tkinter, ale jestem całkiem pewny, że trzeba użyć pewnego rodzaju pętli zdarzenie lub oddzielny wątek. – sberry

+1

@sberry: zdecydowanie nie jest to wątek, a pętla zdarzeń już działa. Jest to rozwiązane w sposób trywialny za pomocą 'po', który umieszcza zdarzenie w kolejce do przetworzenia w określonym czasie w przyszłości. –

Odpowiedz

11

Naprawdę należy używać coś jak Tkinter after method zamiast time.sleep(...).

Istnieje przykład użycia metody after pod tym numerem other stackoverflow question.

Oto zmodyfikowana wersja skryptu, który używa po metody:

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

Dziękuję Ci, pomógł dużo – Crispy