Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann verhindert werden, dass die Tkinter-GUI einfriert, während man auf den Abschluss eines Threads wartet?

Wie kann verhindert werden, dass die Tkinter-GUI einfriert, während man auf den Abschluss eines Threads wartet?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 05:22:03507Durchsuche

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

Tkinter-GUI friert ein/hängt beim Warten auf den Abschluss des Threads

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn