0

これはばかげた質問かもしれません。Tkinter GUI にラベルがあり、時間の経過とともに更新されるようにしたいと考えています。

例:

Msglabel=Tkinter.Label(... text="")

Msglabel.Cofigure(text=" EXAMPLE!")

Wait(5sec)

Msglabel.Configure(text=" NEW EXAMPLE!")

メソッドについて読んだことがありますが、after()Wait のようなものを探しています。

4

1 に答える 1

2

Tkinter は単一のスレッド ループで UI を更新するため、待機期間中に制御を Tkinter に渡す必要があります。

構成呼び出しの間にスリープすると、UI がハングします。

あなたが言ったように、afterあなたが望む方法です。次のようなことを試してください:

try:
    import Tkinter as tkinter  # Python 2
except ImportError:
    import tkinter  # Python 3
import itertools


class MyApplication(object):
    def __init__(self):
        # Create and pack widgets
        self.root = tkinter.Tk()
        self.label = tkinter.Label(self.root)
        self.button = tkinter.Button(self.root)
        self.label.pack(expand=True)
        self.button.pack()

        self.label['text'] = 'Initial'
        self.button['text'] = 'Update Label'
        self.button['command'] = self.wait_update_label

        # Configure label values
        self.label_values = itertools.cycle(['Hello', 'World'])

    def launch(self):
        self.root.mainloop()

    def wait_update_label(self):
        def update_label():
            value = next(self.label_values)
            self.label['text'] = value

        update_period_in_ms = 1500
        self.root.after(update_period_in_ms, update_label)
        self.label['text'] = 'Waiting...'


if __name__ == '__main__':
    app = MyApplication()
    app.launch()
于 2013-03-29T05:27:05.987 に答える