Уведомление об изменении даты в приложении Tkinter (win32)

StackOverflow https://stackoverflow.com/questions/157116

Вопрос

Кто-нибудь знает, возможно ли (и если да, то как) привязать событие (Python + Tkinter в MS Windows) к изменению системной даты?

Я знаю, что могу время от времени проверять события .after;Я спрашиваю, могу ли я каким-то образом инициировать событие всякий раз, когда изменяется системная дата / время, либо автоматически (напримердля перехода на летнее время) или вручную.

MS Windows отправляет такие события приложениям, и Tkinter действительно их получает;Я знаю, потому что если у меня есть ожидание таймера .after и я устанавливаю дату / время после истечения срока действия таймера, событие таймера срабатывает мгновенно.

Это было полезно?

Решение

Я знаю, потому что если у меня есть ожидание таймера .after и я устанавливаю дату / время после истечения срока действия таймера, событие таймера срабатывает мгновенно.

Это может просто означать, что Tkinter (или Tk) опрашивает системные часы как часть цикла событий, чтобы определить, когда запускать таймеры.

Если вы используете Windows, в книге Марка Хаммонда отмечается, что вы можете использовать модуль win32evtlogutil для реагирования на изменения в журнале событий Windows.В принципе, это работает следующим образом:

import win32evtlogutil
def onEvent(record):
  # Do something with the event log record
win32evtlogutil.FeedEventLogRecords(onEvent)

Но вам нужно будет получить документы о структуре записей событий (мне не хочется печатать всю главу, извините :-) ).Кроме того, я не знаю, появляются ли изменения даты в журнале событий в любом случае.

На самом деле, разве так уж плохо просто опросить системные часы?Это кажется самым простым, и я не думаю, что это сильно замедлит вас.

(наконец, комментарий:Не знаю, как в вашей стране, но здесь, в Новой Зеландии, переход на летнее время не предполагает смены даты;меняется только время (с 2:00 до 3:00 или наоборот))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top