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()
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!