异步更新PyGTK托盘图标

时间:2011-01-16 22:50:22

标签: python gtk pygtk

正如here所述,我有一个使用PyGTK的简单托盘图标。

作为GTK的新手,在我看来gtk.main()是同步的,阻止任何进一步处理,直到相应的UI关闭。

那么我如何定期(例如每5秒)更新/刷新StatusIcon的图标 - 我是否必须求助于Twisted等人。对此?

2 个答案:

答案 0 :(得分:4)

您可以使用gobject.timeout_add()添加定期任务。第一个参数是以秒为单位的间隔,第二个参数是您要调用的回调。只要在用作True时返回评估为bool的内容,就会调用回调。

另请参阅PyGTK FAQ的第20部分,特别是question 20.7

答案 1 :(得分:0)

你不能轻易刷新托盘图标,从已经尝试过这个的托盘图标中取出它并失败了(实际上我只是因为“如果执行难以解释,它是一个坏的想法。“),

但是到目前为止,为了刷新状态图标,您需要使用gtk.status_icon_new_from_gicon()方法设置状态图标,来自doc

  

创建一个显示的状态图标   gio.Icon()。如果图标是主题   图标,它将在更新时更新   主题变化。

因此,如果您想要刷新状态图标,则必须使用gio themed icon创建图标,现在您可以直接更新主题图标,此更改将直接显示在托盘状态中。

现在关于你的问题:

是gtk.main()阻塞等待信号,所以你只需要将一个信号绑定到一个动作,当这个信号被触发时,可以执行动作,对于你的动作回调你的情况你可以把代码放到将刷新您的状态图像。

希望我在这里帮到你。