1. ホーム
  2. python

[解決済み] tkinterで更新をスケジュールする(例えば、時計を更新する)にはどうしたらいいですか?

2023-04-13 12:20:56

質問

Pythonのtkinterライブラリを使ってプログラムを書いています。

私の主な問題は、私はどのように作成するかがわからないということです。 タイマ または クロック のように hh:mm:ss .

私はそれを自分自身で更新する必要があります (それは私がやり方を知らないことです)。 time.sleep() をループで使用すると、GUI全体がフリーズします。

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

Tkinterのルートウィンドウには after というメソッドがあります。これは、与えられた期間の後に呼び出される関数をスケジュールするために使用することができます。もしその関数自身が after を呼び出すと、自動的に繰り返されるイベントが設定されます。

以下は動作例です。

# for python 3.x use 'tkinter' rather than 'Tkinter'
import Tkinter as tk
import time

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="")
        self.label.pack()
        self.update_clock()
        self.root.mainloop()

    def update_clock(self):
        now = time.strftime("%H:%M:%S")
        self.label.configure(text=now)
        self.root.after(1000, self.update_clock)

app=App()

念頭に置くべきは after は関数が正確に時間通りに実行されることを保証するものではないことに注意してください。あくまでも のスケジュール をスケジュールするだけです。Tkinterはシングルスレッドなので、アプリがビジー状態であれば、ジョブが呼び出される前に遅延が発生する可能性があります。この遅延は通常マイクロ秒単位で測定されます。