私は物理学をシミュレートするプログラムを書いていますが、after()
役に立つことがわかりました。
物理演算とシミュレーション用のスレッドを作成したいと思っています。しかし、ようやくその機能に気づいたとき、代わりにそれを使用しました。
ですから、Tkinter がその機能をどのように実装しているかに興味があります。マルチスレッドですか?
私は物理学をシミュレートするプログラムを書いていますが、after()
役に立つことがわかりました。
物理演算とシミュレーション用のスレッドを作成したいと思っています。しかし、ようやくその機能に気づいたとき、代わりにそれを使用しました。
ですから、Tkinter がその機能をどのように実装しているかに興味があります。マルチスレッドですか?
マルチスレッドではありません。
Tkinter は、オブジェクトをキューから取り出して処理することで機能します。通常、このキューにあるのは、ユーザーによって生成されたイベント (マウスの動き、ボタンのクリックなど) です。
このキューには、 で作成されたジョブなど、他のものを含めることができますafter
。したがって、Tkinter にとって、送信されたものafter
は、特定の時点で処理される別のイベントにすぎません。
次のスクリプトは、GUI を 5 秒間フリーズするため、マルチスレッド化されません。
from Tkinter import Tk, Label
from time import sleep
root = Tk()
w = Label(root, text="Hello, world!")
w.pack()
w.after(100, lambda: sleep(5))
root.mainloop()