In diesem Beispiel friert die GUI ein, wenn die Schaltfläche gedrückt wird, weil der Hauptthread wartet damit der von Thread(target = self.threaded_function) erstellte Thread beendet wird, bevor fortgefahren wird. Damit die GUI reaktionsfähig bleibt, ist es wichtig, ein Blockieren des Hauptthreads zu vermeiden.
Hier ist eine alternative Implementierung, die eine Warteschlange verwendet, um Daten zwischen dem Thread und der GUI zu übergeben:
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()
Hier Implementierung reagiert der GUI-Thread weiterhin, während die Threaded_Function im Hintergrund ausgeführt wird. Die Warteschlange wird verwendet, um Daten zwischen den beiden Threads zu kommunizieren. Wenn die helloCallback-Funktion aufgerufen wird, fügt sie der Warteschlange ein Element hinzu, das dann von der threaded_function abgerufen und verarbeitet wird.
Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass die Tkinter-GUI einfriert, während man auf den Abschluss eines Threads wartet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!