Python AppIndicator 绑定 -> 如何检查菜单是否打开?

15 投票
2 回答
2589 浏览
提问于 2025-04-16 23:36

这里有一个简单的 AppIndicator 示例:

#!/usr/bin/python

import gobject
import gtk
import appindicator

if __name__ == "__main__":
    ind = appindicator.Indicator("example-simple-client", "gtk-execute", appindicator.CATEGORY_APPLICATION_STATUS)
    ind.set_status (appindicator.STATUS_ACTIVE)
    menu = gtk.Menu()
    menu_items = gtk.MenuItem('Quit')
    menu.append(menu_items)
    menu_items.connect("activate", gtk.main_quit)
    menu_items.show()
    ind.set_menu(menu)
    gtk.main()

不过,关于这个的文档非常不完整。我想知道有没有办法检查用户是否打开了 AppIndicator 菜单(比如说,用户点击了指示器图标)。有没有什么信号可以在菜单打开时发出呢?

2 个回答

2

在Launchpad上有一个关于这个问题的bug记录,链接是 https://bugs.launchpad.net/screenlets/+bug/522152

请注意,“激活”信号是可以用于AppIndicator的子菜单的。

8

看起来答案是不行,真可惜。

print gobject.signal_list_names(ind)
('new-icon', 'new-attention-icon', 'new-status', 'new-label', 'x-ayatana-new-label', 'connection-changed', 'new-icon-theme-path')

我试过所有的方法,但没有一个在点击指示器时能激活。值得一提的是,Unity的开发者似乎想让所有指示器的行为保持一致,所以很可能这是故意限制的。

撰写回答