Pregunta

¿Alguien sabe si es posible (y si es así, cómo) vincular un evento (Python + Tkinter en MS Windows) a un cambio de fecha del sistema?

Sé que puedo tener .after eventos de verificación de vez en cuando; Me pregunto si de alguna manera se puede activar un evento cada vez que cambie la fecha / hora del sistema, ya sea de forma automática (por ejemplo, para el horario de verano) o manualmente.

MS Windows envía dichos eventos a las aplicaciones y Tkinter los recibe; Lo sé, porque si tengo un temporizador .after en espera y configuro la fecha / hora después de la expiración del temporizador, el evento del temporizador se dispara instantáneamente.

¿Fue útil?

Solución

  

Lo sé, porque si tengo un temporizador .after en espera y configuro la fecha / hora después de la expiración del temporizador, el evento del temporizador se dispara instantáneamente.

Eso podría significar que Tkinter (o Tk) está sondeando el reloj del sistema como parte del bucle de eventos para determinar cuándo se deben ejecutar los temporizadores.

Si está usando Windows, Mark Hammond señala en el libro que puede usar el módulo win32evtlogutil para responder a los cambios en el registro de eventos de Windows. Básicamente funciona así:

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

Pero necesitará obtener documentos sobre la estructura de los registros de eventos (no tengo ganas de escribir todo el capítulo, lo siento :-)). Además, no sé si los cambios de fecha aparecen en el registro de eventos de todos modos.

Realmente, sin embargo, ¿es tan malo simplemente encuestar el reloj del sistema? Parece más fácil y no creo que te ralentice mucho.

(finalmente, un comentario: no sé sobre su país, pero aquí en Nueva Zelanda, el horario de verano no implica un cambio de fecha; solo los cambios de hora (de 2 a.m. a 3:00, o viceversa))

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top