このコードでは、ボタンが押されたときに GUI がフリーズしています。この問題は、スレッドでの join() の使用に起因し、スレッドが実行を完了するまで GUI の mainloop() をブロックします。
Tkinter はシングルスレッド GUI ライブラリ。つまり、すべての GUI 操作はメインスレッドで実行する必要があります。 join() を使用してスレッドが開始されると、スレッドが終了するまでメイン スレッドによるコードの実行がブロックされます。これにより、GUI が応答しなくなったり、完全にハングしたりする可能性があります。
フリーズの問題を回避するには、スレッドの実行にノンブロッキング メソッドを使用するようにコードを変更する必要があります。これを行う 1 つの方法は、tkinter ウィジェットの after() メソッドを使用して、指定された遅延の後に実行される関数をスケジュールすることです。
<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>
このコードでは、hello_callback 関数が実行されるようにスケジュールされています。 50ミリ秒後。これにより、スレッドがバックグラウンドで実行されている間も、GUI はユーザー入力に応答し続けることができます。
スレッドの実行にノンブロッキング メソッドを使用することで、GUI の応答性が維持され、フリーズ問題は解決されました。
以上がスレッドで `join()` を使用すると tkinter GUI がフリーズするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。