time() と after() を使用した Tkinter のスレッド
Tkinter は堅牢な GUI フレームワークであるにもかかわらず、時間のかかる実行時に制限に遭遇します。タスク。このような制限の 1 つは、Tkinter スレッド内で Python の time.sleep() 関数を使用するときに発生します。この方法では、GUI スレッド全体が停止し、アプリケーションが応答しなくなります。
代替ソリューション
この問題を回避するために、Tkinter は、遅延タスクをスケジュールするための代替方法を提供します。 after() のように。 GUI スレッドをブロックする time.sleep() とは異なり、after() は、指定された時間間隔の後にコールバック関数が実行されるようにスケジュールします。これにより、時間のかかるタスクがバックグラウンド スレッドで実行されている間も GUI の応答性を維持できます。
例: 遅延テキスト削除
次のシナリオを考えてみましょう。 5 秒の遅延後にテキスト ボックスからテキストを削除する予定です:
from tkinter import * from time import sleep def empty_textbox(): textbox.delete("1.0", END) root = Tk() frame = Frame(root, width=300, height=100) textbox = Text(frame) frame.pack_propagate(0) frame.pack() textbox.pack() textbox.insert(END, 'This is a test') sleep(5) empty_textbox() root.mainloop()
このコードを実行すると、 sleep() の実行中、GUI は 5 秒間フリーズします。これを解決するには、sleep() を after() に置き換えます。
from tkinter import * from time import sleep def empty_textbox(): textbox.delete("1.0", END) root = Tk() frame = Frame(root, width=300, height=100) textbox = Text(frame) frame.pack_propagate(0) frame.pack() textbox.pack() textbox.insert(END, 'This is a test') textbox.after(5000, empty_textbox) root.mainloop()
after() 関数は、empty_textbox() が 5 秒の遅延後に実行されるようにスケジュールし、GUI スレッドが応答性を維持できるようにします。プロセス。
以上がGUI スレッドをブロックせずに Tkinter で遅延タスクをスケジュールするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。