异步更新PyGTK托盘图标

1 投票
2 回答
840 浏览
提问于 2025-04-16 10:04

正如这里所解释的,我用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

撰写回答