2012-05-01 2 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.

Вот модифицированная версия скрипта, который использует после метода:

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