2012-05-01 1 views
7

J'essaie de supprimer du texte dans une zone de texte après avoir attendu 5 secondes, mais à la place, le programme ne s'exécute pas et dort sur tout le reste. Est-ce qu'il y a aussi un moyen pour moi de faire dormir ma zone de texte afin que je puisse exécuter d'autres codes pendant que le texte est gelé?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

Je n'ai pas beaucoup d'expérience avec Tkinter, mais je suis sûr que vous devez soit utiliser une sorte de boucle d'événement ou d'un fil séparé. – sberry

+1

@sberry: certainement pas un thread, et il y a déjà une boucle d'événement en cours d'exécution. Ceci est trivialement résolu en utilisant 'after' qui place un événement dans la file d'attente pour être traité à un certain moment dans le futur. –

Répondre

11

Vous devriez vraiment utiliser quelque chose comme le Tkinter after method plutôt que time.sleep(...).

Il existe un exemple d'utilisation de la méthode after à ce other stackoverflow question.

est ici une version modifiée de votre script qui utilise le après la méthode:

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

Merci, il a aidé beaucoup – Crispy

Questions connexes