使用AppIndicator3创建带菜单的托盘图标possible。但这种解决方案不可移植。例如it doesn't work on FreeBSD,因为此系统上没有libappindicator3。我怀疑这样的代码在Windows和MacOS上也不起作用。
如果没有AppIndicator3,如何做同样的代码,那么代码可以在所有(或几乎所有)系统上运行?
答案 0 :(得分:4)
好的,我想我已经明白了。如果AppIndicator3不可用,我们的想法是回退到Gtk.StatusIcon:
class TrayIcon:
def __init__(self, appid, icon, menu):
self.menu = menu
APPIND_SUPPORT = 1
try:
from gi.repository import AppIndicator3
except:
APPIND_SUPPORT = 0
if APPIND_SUPPORT == 1:
self.ind = AppIndicator3.Indicator.new(
appid, icon, AppIndicator3.IndicatorCategory.APPLICATION_STATUS)
self.ind.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
self.ind.set_menu(self.menu)
else:
self.ind = Gtk.StatusIcon()
self.ind.set_from_file(icon)
self.ind.connect('popup-menu', self.onPopupMenu)
def onPopupMenu(self, icon, button, time):
self.menu.popup(None, None, Gtk.StatusIcon.position_menu, icon, button, time)
适用于Linux + Unity,Linux + Xfce,FreeBSD + i3。
另见: