Как периодически вызывать метод / функцию? (time.sleep не работает)

Как я могу периодически звонить update? Я пробовал следующее, но он пропускает отображение графического интерфейса в течение limit секунд, а затем показывает только последнее обновление:

import tkinter as tk
import time

root = tk.Tk()

widget = tk.Label(root, text="Initial text")
widget.pack()

def update():
    global widget
    limit = 3
    period = 1
    for each in range(limit):
        widget['text'] = each
        time.sleep(period)

update()

root.mainloop()

Потом попробовал:

import tkinter as tk
import time

root = tk.Tk()

widget = tk.Label(root, text="Initial text")
widget.pack()

def update():
    global widget, period
    widget['text'] = each
    time.sleep(period)

limit = 3
period = 1
for each in range(limit):
    update()

root.mainloop()

Что привело к тому же результату, что и предыдущий. Так как я могу это сделать?


person Nae    schedule 10.12.2017    source источник
comment
Также см. этот вопрос и ответы.   -  person Nae    schedule 11.12.2017


Ответы (1)


Вместо time.sleep попробуйте использовать after следующим образом, так как это не задержит отображение вашего графического интерфейса:

import tkinter as tk


def update():
    global each, limit, period, widget
    if each < limit:
        widget['text'] = each
        each += 1
        widget.after(period*1000, update)

root = tk.Tk()

widget = tk.Label(root, text="Initial text")
widget.pack()


limit = 3
period = 1
each = 0

update()

root.mainloop()
person Community    schedule 10.12.2017