我最近注意到,在 ubuntu unity 中,应用程序指示器(替代系统托盘)不显示我添加到 gtk 库存中的自定义图标,而只显示基本的库存图标。在正确的图标位置,我看到的是“gtk-missing-image”。在我的应用程序工具栏和菜单上,这些图标显示正确,问题只出在顶部应用程序指示器上。我以这种方式集成库存图标后使用 gtk ui 管理器:
factory = gtk.IconFactory()
pixbuf = gtk.gdk.pixbuf_new_from_file(filepath)
iconset = gtk.IconSet(pixbuf)
factory.add(stock_name, iconset)
factory.add_default()
然后是 appindicator 代码:
.....
try:
import appindicator
HAS_APPINDICATOR = True
except: HAS_APPINDICATOR = False
....
if HAS_APPINDICATOR:
self.ind = appindicator.Indicator("x-tile", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)
self.ind.set_status(appindicator.STATUS_ACTIVE)
self.ind.set_attention_icon("indicator-messages-new")
self.ind.set_icon("x-tile")
self.ind.set_menu(self.ui.get_widget("/SysTrayMenu"))
else:
self.status_icon = gtk.StatusIcon()
self.status_icon.set_from_stock("Tile Quad")
self.status_icon.connect('button-press-event', self.on_mouse_button_clicked_systray)
self.status_icon.set_tooltip(_("Tile the Windows Upon your X Desktop"))
完整代码:
hg clone https://giuspen-x-tile.googlecode.com/hg/ hg_x-tile
cd hg_x-tile
hg up x-tile2
使用系统托盘时图标可见,而不是应用程序指示器。如果有人解决了这个问题,请帮忙。
答案1
无法使用在 appindicators 中即时创建的库存图标。
使用 statusicons 时,您的应用程序将全权负责构建和显示菜单。但是,使用 appindicators 时,幕后情况是,您的应用程序只是发出请求,而真正构建和显示菜单的是后台运行的服务。
此服务是一个独立程序,与您的程序完全分离。因此,它无法感知您即时创建的环境变量和库存图标名称等信息。
最好的解决方法是使用指标的 set_icon_theme_path 来告诉它图标在哪里。在这种情况下,您甚至不需要更改库存。