Tkinter предоставляет метод с именем after
, который позволяет планировать выполнение работ в будущем. Если выполняемая работа может быть выполнена менее чем за несколько сотен миллисекунд, вы можете использовать ее вместо чего-то более сложного, такого как многопоточность или многопроцессорность.
Виджеты имеют метод с именем configure
, который позволяет изменять атрибуты виджета после его создания. Вы можете использовать этот метод для изменения данных, отображаемых в виджете.
Например, предположим, у вас есть функция с именем get_resp
. Может быть, он вызывает службу отдыха, может быть, он читает файл, это не имеет значения. Например, если вы хотите вызвать эту функцию и обновлять экран каждые 10 секунд, вы можете сделать это следующим образом:
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.label = tk.Label(self, text=resp)
...
def refresh_display(self):
# get the new value
resp = self.get_resp()
# update the display with the new value
self.label.configure(text=resp)
# have this function be called again in 10 seconds
self.after(10000, self.refresh_display)
Если self.get_resp()
занимает слишком много времени, другим вариантом будет создание потока, который вызывает self.get_resp()
, а затем устанавливает переменную с новым значением (или помещает ее в потокобезопасную очередь). Затем вы можете изменить refresh_display
, чтобы обновить переменную с тем, что хранится в переменной или что-то в очереди.