Maison > Article > développement back-end > Pourquoi mon interface graphique tkinter se bloque-t-elle lorsque j'utilise « join() » sur un fil de discussion ?
Dans ce code, l'interface graphique se bloque lorsqu'un bouton est enfoncé. Le problème vient de l'utilisation de join() sur un thread, qui bloque la mainloop() de l'interface graphique jusqu'à ce que le thread termine son exécution.
Tkinter est un bibliothèque GUI monothread, ce qui signifie que toutes les opérations GUI doivent être effectuées sur le thread principal. Lorsqu'un thread est démarré à l'aide de join(), il empêche le thread principal d'exécuter davantage de code jusqu'à la fin du thread. Cela peut conduire l'interface graphique à ne plus répondre, voire à se bloquer complètement.
Pour éviter le problème de gel, le code doit être modifié pour utiliser une méthode non bloquante pour l'exécution du thread. Une façon de procéder consiste à utiliser la méthode after() du widget tkinter pour planifier l'exécution d'une fonction après un délai spécifié.
<code class="python">m = magic() def hello_callback(): m.add_item("asd") m.start_converting("test") # Schedule the function to be executed after 50 milliseconds top.after(50, hello_callback)</code>
Dans ce code, la fonction hello_callback est programmée pour être exécutée après 50 millisecondes. Cela permet à l'interface graphique de continuer à répondre aux entrées de l'utilisateur pendant que le thread s'exécute en arrière-plan.
En utilisant une méthode non bloquante pour exécuter le thread, l'interface graphique reste réactive et le le problème de gel est résolu.
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!