How can I schedule updates (f/e, to update a clock) in tkinter?
Как я могу планировать обновления (например, для обновления часов) в tkinter?
Я пишу программу с библиотекой tkinter на Python.
Моя основная проблема в том, что я не знаю, как создать таймер или часы, подобные hh:mm:ss.
Мне нужно, чтобы он обновился сам (это то, что я не знаю, как сделать); когда я использую time.sleep() в цикле, весь графический интерфейс зависает.
Переведено автоматически
Ответ 1
В корневых окнах Tkinter есть метод с именем after который можно использовать для планирования вызова функции через определенный промежуток времени. Если эта функция сама вызывается after, вы настроили автоматически повторяющееся событие.
Вот рабочий пример:
# for python 3.x use 'tkinter' rather than 'Tkinter' import Tkinter as tk import time
defupdate_clock(self): now = time.strftime("%H:%M:%S") self.label.configure(text=now) self.root.after(1000, self.update_clock)
app=App()
Имейте в виду, что after это не гарантирует, что функция будет запущена точно в срок. Это только планирует выполнение задания через заданный промежуток времени. Если приложение занято, может возникнуть задержка перед его вызовом, поскольку Tkinter однопоточный. Задержка обычно измеряется в микросекундах.
Ответ 2
Пример синхронизации Python3 с использованием frame.after(), а не приложения верхнего уровня. Также показано обновление метки с помощью StringVar()
#!/usr/bin/env python3
# Display UTC. # started with https://docs.python.org/3.4/library/tkinter.html#module-tkinter
import tkinter as tk import time
defcurrent_iso8601(): """Get current date and time in ISO8601""" # https://en.wikipedia.org/wiki/ISO_8601 # https://xkcd.com/1179/ return time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())
defonUpdate(self): # update displayed time self.now.set(current_iso8601()) # schedule timer to call myself after 1 second self.after(1000, self.onUpdate)