PYGTK到PYGI:gtk.timeout_add等效项


9

我已经转换了一些Python代码以使用PYGI,但是我不知道如何转换这一行:

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

明确地说,由于我不太了解PYGTK和PYGI之间的区别,因此我的新代码使用了

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

如此处所示https://wiki.ubuntu.com/DesktopExperienceTeam/ApplicationIndicators#Python_version

我要转换的完整代码在这里http://pastebin.com/raw.php?i=aUtASRpy

相当于什么

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

在PYGI中?

我还假设PYGI是制作统一指标的最现代方法

我还假设指示器最好检查某物的状态,而不是告诉指示器状态(推或拉)。可以让python程序每秒检查一次吗?

谢谢!

Answers:


1

最好每个...问一个问题。

Python的标准库具有一个threading模块,该模块具有一个Timer完全满足您需要的类。文件资料

关于推与拉-最好是当您的应用程序在发生某事(推送)时收到通知,而不是每秒检查某件事是否发生(推送),这绝对更好-“我们到了吗?我们到了吗?我们到了吗? 。”-因为它允许您的应用仅在不被通知之前就进入休眠状态,而不是每秒进行相同的重复检查。但事实是,对于某些类型的活动而言,获取通知可能很棘手,因此这取决于应用程序的性质。经常进行检查也不利于电池寿命和其他工作。


谢谢你,这使我在stackoverflow.com/questions/9812344/的大力帮助下,一起破解了pastebin.com/raw.php?i=0jLxZ994 ... 但是,现在是时候学习如何制作某种监听器了我想到大多数“民意测验”将发现什么都没有改变,但这是又一次了。谢谢!
onBootQuestioner 2012年

19

只是为了确保在答案中也存在Gtk方式:

相当于

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

在gobject内省(PyGI)中是:

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

但是,每隔x秒定期检查某件事时,您应该使用

GLib.timeout_add_seconds(PING_FREQUENCY, self.doWork)

这使Glib可以对计时器进行分组,从而节省电量,这对移动设备很重要。从文档中

同时触发的一组计时器可提高电源效率和CPU效率,因此,如果您的计时器以秒为单位,并且您不需要从现在起精确到一秒钟就使用第一个计时器,请使用glib.timeout_add_seconds( )比glib.timeout_add()更可取。


4
这似乎比使用线程更好。尤其是因为如果您真的不知道自己在做什么,线程处理可能会导致奇怪的错误和锁定。
Timo 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.