web-dev-qa-db-fra.com

PYGTK à PYGI: équivalent gtk.timeout_add

J'ai converti du code Python pour utiliser PYGI, mais je ne vois pas comment convertir cette ligne:

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Pour être clair, comme je ne connais pas vraiment la différence entre PYGTK et PYGI, mon nouveau code utilise

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

comme indiqué ici https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

Le code complet que j'essaie de convertir est ici http://Pastebin.com/raw.php?i=aUtASRpy

Quel est l'équivalent de

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

dans PYGI?

Je suppose également que PYGI est le moyen le plus moderne de créer un indicateur d’unité.

Je suppose également qu'il est préférable que l'indicateur vérifie l'état de quelque chose plutôt que de lui indiquer l'état de l'indicateur (push vs pull). Est-ce correct d'avoir un programme python vérifiant quelque chose toutes les secondes?

Merci!

9
onBootQuestioner

Il vaut mieux poser une question par ... euh ... question.

La bibliothèque standard de Python contient le module threading, qui contient la classe Timer, qui répond exactement à vos besoins. Documentation .

En ce qui concerne Push vs pull, il est nettement préférable que votre application reçoive une notification lorsque quelque chose se produit (Push) au lieu de vérifier si quelque chose se passe toutes les secondes (pull) - "sommes-nous encore là? Sommes-nous encore là? Sommes-nous encore là?" . "- parce que cela permet à votre application de dormir et de ne rien faire tant qu’elle n’a pas été avertie, au lieu de faire la même vérification répétée toutes les secondes. Le fait est que, pour certains types d’activités, il peut être difficile d’obtenir une notification, cela dépend donc de la nature de votre demande. Faire des vérifications trop souvent est également mauvais pour la vie de la batterie et d'autres choses.

1
Sergey

Juste pour m'assurer que la méthode Gtk est également présente dans une réponse:

L'équivalent de

gtk.timeout_add(PING_FREQUENCY * 1000, self.doWork)

dans l'introspection de gobject (PyGI) est:

from gi.repository import GLib
GLib.timeout_add(PING_FREQUENCY * 1000, self.doWork)

Cependant, lorsque vous vérifiez quelque chose régulièrement toutes les x secondes, vous devez utiliser

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

Cela permet à Glib de regrouper les minuteries et d’économiser de l’énergie, ce qui est important pour les appareils mobiles. De la documentation :

Le regroupement des minuteries à déclencher simultanément entraîne un comportement plus efficace en termes de puissance et d’efficacité du processeur. Par conséquent, si votre minuterie est exprimée en multiples de secondes et que vous n’avez pas besoin du premier minuteur à une seconde à partir de maintenant, utilisez glib.timeout_add_seconds ( ) est préféré à glib.timeout_add ().

19
xubuntix