2012-05-01 9 views
7

Estoy tratando de eliminar texto dentro de un cuadro de texto después de esperar 5 segundos, pero en su lugar el programa no se ejecutará y no duerme sobre todo lo demás. También, ¿hay alguna forma de que haga que mi cuadro de texto duerma para poder ejecutar otro código mientras el texto está congelado?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

no tengo mucha experiencia con Tkinter, pero estoy bastante seguro de que necesita o bien utilizar algún tipo de bucle de eventos o una hilo separado – sberry

+1

@sberry: definitivamente no es un hilo, y ya hay un bucle de evento en ejecución. Esto se resuelve trivialmente usando 'after', que coloca un evento en la cola para ser procesado en un momento determinado en el futuro. –

Respuesta

11

que realmente debería estar usando algo como el Tkinter after method en lugar de time.sleep(...).

Hay un ejemplo del uso del método after en este other stackoverflow question.

Aquí es una versión modificada de la secuencia de comandos que utiliza el después de método:

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

Gracias ayudó mucho – Crispy