Threading dans Tkinter avec time() et after()
Bien qu'il s'agisse d'un framework GUI robuste, Tkinter rencontre des limites lors de l'exécution de tâches fastidieuses. tâches. Une de ces limitations survient lors de l'utilisation de la fonction time.sleep() de Python dans un thread Tkinter. Cette approche arrête l'intégralité du thread de l'interface graphique, ce qui empêche l'application de répondre.
Solutions alternatives
Pour contourner ce problème, Tkinter propose des méthodes alternatives pour planifier des tâches retardées, telles que comme après(). Contrairement à time.sleep(), qui bloque le thread de l'interface graphique, after() planifie l'exécution d'une fonction de rappel après un intervalle de temps spécifié. Cela permet à l'interface graphique de rester réactive pendant que la tâche fastidieuse est exécutée dans un fil d'arrière-plan.
Exemple : Suppression de texte retardée
Considérez le scénario suivant dans lequel vous avez l'intention de supprimer le texte d'une zone de texte après un délai de 5 secondes :
from tkinter import * from time import sleep 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') sleep(5) empty_textbox() root.mainloop()
Lorsque vous exécutez ce code, l'interface graphique se fige pendant 5 secondes pendant l'exécution de sleep(). Pour résoudre ce problème, remplacez sleep() par after() :
from tkinter import * from time import sleep 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()
La fonction after() planifie l'exécution de empty_textbox() après un délai de 5 secondes, permettant au thread de l'interface graphique de rester réactif tout au long de l'exécution. processus.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!