Tkinter应用程序中的日期更改通知(win32)

时间:2020-03-06 14:58:17  来源:igfitidea点击:

有谁知道是否有可能(如果是,如何)将事件(在MS Windows上为Python + Tkinter)绑定到系统日期更改?

我知道我可以偶尔进行一次.after事件检查;我问我是否可以在系统日期/时间自动更改(例如夏令时)或者手动更改时触发事件。

MS Windows将此类事件发送给应用程序,而Tkinter确实会接收到这些事件。我知道,因为如果我有一个.after计时器等待并且在计时器到期后设置日期/时间,则计时器事件会立即触发。

解决方案

I know, because if I have an .after timer waiting and I set the date/time after the timer's expiration, the timer event fires instantly.

这可能仅意味着Tkinter(或者Tk)正在轮询系统时钟,作为事件循环的一部分,以弄清楚何时运行计时器。

如果我们使用的是Windows,Mark Hammond的书中指出,我们可以使用win32evtlogutil模块来响应Windows事件日志中的更改。基本上它是这样的:

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

但是,我们需要获取有关事件记录结构的文档(我不希望输入整个章节,对不起:-))。另外我也不知道事件日志中是否出现日期更改。

但是,实际上,仅轮询系统时钟是否很糟糕?看来最简单,我认为这不会让我们放慢脚步。

(最后,发表评论:我不知道国家/地区,但是在新西兰,夏令时不涉及日期更改;仅涉及时间更改(从凌晨2点至凌晨3点,或者相反)