异步更新PyGTK托盘图标
正如这里所解释的,我用PyGTK做了一个简单的托盘图标。
因为我对GTK还很陌生,所以我觉得gtk.main()
是同步的,这意味着在关闭相应的用户界面之前,它会阻止任何进一步的处理。
那么,我该如何定期(比如每5秒)更新或刷新StatusIcon
的图标呢?我需要使用Twisted等工具吗?
2 个回答
0
你不能轻易地刷新托盘图标,听我说,这个我试过但失败了(其实我放弃的原因是“如果一个实现很难解释,那就是个坏主意。”)
不过我现在有一些信息,想要刷新状态图标,你需要使用 gtk.status_icon_new_from_gicon()
这个方法来设置你的状态图标,具体可以参考这个 文档:
这个方法会创建一个显示 gio.Icon() 的状态图标。如果这个图标是主题图标,当主题改变时,它会自动更新。
所以如果你想刷新状态图标,你需要使用 gio 主题图标 来创建你的图标,现在你可以直接更新你的主题图标,这个变化会立即在托盘状态中显示出来。
关于你的问题:
是的,gtk.main() 会阻塞,等待信号,所以你只需要把一个信号绑定到某个动作上,当这个信号被触发时,就可以执行这个动作。在你的情况下,你可以在动作回调中放入刷新状态图像的代码。
希望这些信息对你有帮助。
4
你可以使用 gobject.timeout_add()
来添加定期执行的任务。第一个参数是时间间隔,单位是秒;第二个参数是你希望被调用的函数。只要这个函数返回的结果在布尔值(也就是判断真假的时候)中被认为是 True
,它就会被不断调用。
你还可以查看 PyGTK 常见问题解答 的第20节,特别是 问题20.7。