Python 3 & GTK3:跨平台托盘图标

Python 3 & GTK3: crossplatform tray icon

它是 possible to create a tray icon with a menu using AppIndicator3. But this solution is not portable. For instance it doesn't work on FreeBSD 因为这个系统上没有 libappindicator3。我怀疑这样的代码在 Windows 和 MacOS 上也不起作用。

如何在没有 AppIndicator3 的情况下执行相同的操作,以便代码可以在所有(或几乎所有)系统上运行?

好的,我想我明白了。如果 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。

另请参阅: