Maison > développement back-end > Tutoriel Python > Comment empêcher l'interface graphique de Tkinter de se bloquer en attendant la fin d'un fil de discussion ?

Comment empêcher l'interface graphique de Tkinter de se bloquer en attendant la fin d'un fil de discussion ?

Patricia Arquette
Libérer: 2024-11-03 05:22:03
original
589 Les gens l'ont consulté

How to Prevent Tkinter GUI from Freezing While Waiting for a Thread to Finish?

Gelage/suspension de l'interface graphique de tkinter en attendant la fin du thread

Dans cet exemple, l'interface graphique se bloque lorsque vous appuyez sur le bouton car le thread principal est en attente pour que le thread créé par Thread(target = self.threaded_function) se termine avant de continuer. Pour que l'interface graphique reste réactive, il est important d'éviter de bloquer le thread principal.

Voici une implémentation alternative qui utilise une file d'attente pour transmettre les données entre le thread et l'interface graphique :

queue = Queue()

def threaded_function():
    while True:
        if not queue.empty():
            item = queue.get()
            print(item)
            # Do other processing here

def helloCallback():
    queue.put("asd")

m = magic()
B = tkinter.Button(top, text = "Hello", command = helloCallback)
B.pack()
top.mainloop()

# Start the thread in the background
t = threading.Thread(target = threaded_function)
t.start()
Copier après la connexion

Dans ce implémentation, le thread GUI continue d'être réactif pendant que la fonction threaded_function s'exécute en arrière-plan. La file d'attente est utilisée pour communiquer des données entre les deux threads. Lorsque la fonction helloCallback est appelée, elle ajoute un élément à la file d'attente qui est ensuite récupéré par la fonction threaded_function et traité.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal