Domanda

Qualcuno sa se è possibile (e se sì, come) associare un evento (Python + Tkinter su MS Windows) a un cambio di data del sistema?

So di poter controllare gli eventi .after di tanto in tanto; Chiedo se posso in qualche modo attivare un evento ogni volta che cambia la data / ora del sistema, automaticamente (ad es. Per l'ora legale) o manualmente.

MS Windows invia tali eventi alle applicazioni e Tkinter li riceve; Lo so, perché se ho un timer .after in attesa e imposto la data / ora dopo la scadenza del timer, l'evento timer si attiva immediatamente.

È stato utile?

Soluzione

  

Lo so, perché se ho un timer .after in attesa e imposto la data / ora dopo la scadenza del timer, l'evento timer si attiva immediatamente.

Ciò potrebbe significare solo che Tkinter (o Tk) sta eseguendo il polling dell'orologio di sistema come parte del loop degli eventi per capire quando eseguire i timer.

Se stai usando Windows, il libro di Mark Hammond nota che puoi usare il modulo win32evtlogutil per rispondere alle modifiche nel registro eventi di Windows. Fondamentalmente funziona in questo modo:

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

Ma dovrai avere dei documenti sulla struttura dei registri degli eventi (non ho voglia di scrivere l'intero capitolo, scusa :-)). Inoltre, non so se le modifiche alla data vengano comunque visualizzate nel registro eventi.

In realtà, però, è così brutto eseguire semplicemente il polling dell'orologio di sistema? Sembra più semplice e non credo che ti rallenterebbe molto.

(infine, un commento: non conosco il tuo paese, ma qui in Nuova Zelanda, l'ora legale non comporta un cambio di data; cambia solo l'ora (dalle 2:00 alle 3:00 o viceversa))

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top