1. ホーム
  2. python

[解決済み] Tkinterのイベントループと一緒に独自のコードを実行するにはどうすればよいのでしょうか?

2022-05-14 22:21:20

質問

私の弟はプログラミングを始めたばかりで、科学博覧会のプロジェクトのために、空を飛ぶ鳥の群れのシミュレーションをしています。彼はほとんどのコードを書き、それはうまく動作しますが、鳥が移動する必要があります。 刻々と .

しかし、Tkinterはそれ自身のイベントループのために時間を独占してしまうので、彼のコードは実行されないのです。そのため root.mainloop() は実行され、実行され、実行され続け、そして実行されるのはイベントハンドラだけです。

彼のコードをメインループと一緒に実行させる方法はありますか(マルチスレッドなしで、混乱するので、これは単純に保つべきです)、もしそうなら、それは何ですか?

今現在、彼は醜いハックを思いつき、彼の move() 関数を <b1-motion> に変更することで、ボタンを押したままマウスを動かしている限り、動作するようにしました。しかし、もっと良い方法があるはずです。

どのように解決するのですか?

を使用します。 after メソッドを Tk オブジェクトを作成します。

from tkinter import *

root = Tk()

def task():
    print("hello")
    root.after(2000, task)  # reschedule event in 2 seconds

root.after(2000, task)
root.mainloop()

の宣言とドキュメントは以下の通りです。 after メソッドの宣言とドキュメントです。

def after(self, ms, func=None, *args):
    """Call function once after given time.

    MS specifies the time in milliseconds. FUNC gives the
    function which shall be called. Additional parameters
    are given as parameters to the function call.  Return
    identifier to cancel scheduling with after_cancel."""