代码之家  ›  专栏  ›  技术社区  ›  tzot

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

  •  1
  • tzot  · 技术社区  · 16 年前

    是否有人知道是否有可能(如果有,如何)将事件(MS Windows上的python+tkinter)绑定到系统日期更改?

    我知道我可以。在事件检查之后,我会不时地问,当系统日期/时间改变时,我是否可以以某种方式触发事件,自动(例如夏令时)或手动。

    MS Windows将这些事件发送到应用程序,tkinter确实接收到这些事件;我知道,因为如果我有一个.after timer waiting,并且我在计时器过期后设置了日期/时间,则计时器事件会立即触发。

    1 回复  |  直到 16 年前
        1
  •  1
  •   John Fouhy    16 年前

    我知道,因为如果我有一个.after timer waiting,并且我设置了计时器过期后的日期/时间,计时器事件会立即触发。

    这可能意味着tkinter(或tk)正在轮询系统时钟,作为事件循环的一部分,以确定何时运行计时器。

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

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

    但是你需要得到关于事件记录结构的文档(我不想把整章都打出来,对不起:-)。我也不知道事件日志中是否会出现日期更改。

    不过,真的吗,仅仅轮询系统时钟就这么糟糕了?这似乎是最简单的,我认为这不会让你慢很多。

    (最后,一条评论:我不知道你的国家,但在新西兰,夏令时不涉及日期变更;只涉及时间变更(从凌晨2点到凌晨3点,反之亦然)