PYGTK 到 PYGI:等效于 gtk.timeout_add

PYGTK 到 PYGI:等效于 gtk.timeout_add

我已经转换了一些 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 程序每秒检查某物可以吗?

谢谢!

答案1

只是为了确保 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() 更好。

答案2

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

Python 的标准库有threading一个模块,其中有一个Timer类可以完全满足您的需要。文档

关于推送与拉取 - 当发生某事时,您的应用程序收到通知(推送)肯定比每秒检查是否发生某事(拉取)更好 - “我们到了吗?我们到了吗?我们到了吗?...” - 因为它允许您的应用程序处于休眠状态,直到收到通知,而不是每秒进行相同的重复检查。然而,对于某些类型的活动,获取通知可能很棘手,因此这取决于您的应用程序的性质。过于频繁地进行检查也会对电池寿命和其他方面产生不利影响。

相关内容