この例では、メインスレッドが待機しているため、ボタンが押されたときに GUI がフリーズしています。 Thread(target = self.threaded_function) によって作成されたスレッドは、続行する前に終了する必要があります。 GUI の応答性を維持するには、メイン スレッドのブロックを避けることが重要です。
スレッドと GUI の間でデータを渡すためにキューを使用する代替実装を次に示します。
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()
この例では、この実装では、threaded_function がバックグラウンドで実行されている間、GUI スレッドは応答し続けます。キューは、2 つのスレッド間でデータを通信するために使用されます。 helloCallback 関数が呼び出されると、項目がキューに追加され、その後、threaded_function によって取得されて処理されます。
以上がスレッドの終了を待っている間に Tkinter GUI がフリーズしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。