In diesem Code friert die GUI ein, wenn eine Taste gedrückt wird. Das Problem ergibt sich aus der Verwendung von join() in einem Thread, der den mainloop() der GUI blockiert, bis der Thread seine Ausführung abschließt.
Tkinter ist ein Single-Threaded-GUI-Bibliothek, was bedeutet, dass alle GUI-Vorgänge im Hauptthread ausgeführt werden müssen. Wenn ein Thread mit join() gestartet wird, verhindert es, dass der Hauptthread weiteren Code ausführt, bis der Thread beendet ist. Dies kann dazu führen, dass die GUI nicht mehr reagiert oder sogar ganz hängt.
Um das Problem des Einfrierens zu vermeiden, sollte der Code so geändert werden, dass eine nicht blockierende Methode zum Ausführen des Threads verwendet wird. Eine Möglichkeit, dies zu tun, besteht darin, die Methode after() des tkinter-Widgets zu verwenden, um die Ausführung einer Funktion nach einer bestimmten Verzögerung zu planen.
<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>
In diesem Code ist die Ausführung der Funktion hello_callback geplant nach 50 Millisekunden. Dadurch kann die GUI weiterhin auf Benutzereingaben reagieren, während der Thread im Hintergrund ausgeführt wird.
Durch die Verwendung einer nicht blockierenden Methode zur Ausführung des Threads bleibt die GUI reaktionsfähig und die Das Problem mit dem Einfrieren ist behoben.
Das obige ist der detaillierte Inhalt vonWarum friert meine tkinter-GUI ein, wenn ich „join()' in einem Thread verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!