如何编写将在 Ubuntu 以及其他发行版中显示的状态图标?

Tak*_*kat 23 applet indicator python development application-development

有问题的应用程序执行一些操作(此处将音频连接到网络流)并在这些操作成功时最小化运行。因此需要一个状态图标来显示连接状态(例如已连接/已断开连接)。仅当单击该图标时,应用程序窗口才会打开以访问更多选项。

使用 Python 2.6 和 pyGtk 我通过使用gtk_status_icon方便地实现了这一点。我特意编写了在尽可能多的发行版上运行的应用程序,包括各种 Ubuntu 版本。只有在用户安装它们之后,我才小心使用可能的依赖项。

但是现在我听说未来的 Ubuntu 版本将不再支持 gtk_status_icon。要求开发人员改用应用程序指示器。什么是最佳实践以确保:

  1. 应用程序的本地图标显示正确
  2. 该应用程序仍将在未来的 Ubuntu 版本中运行并显示其图标。
  3. 该应用程序将同时运行,并在其他环境中显示它的图标指示的小程序libappindicator蟒蛇,appindicator不提供。

如果指标小程序未运行,应用程序指标回退机制到 gtk_status_icon 将不起作用。如果没有要从中导入的appindicator模块,Python 解释器将不会运行。我是否需要为不同的发行版开发不同的版本,还是有更好的方法来解决这个问题。

除了Ubuntu Wiki 中给出的示例之外,我在哪里可以找到有关如何使用 ApplicationIndicator 的文档?提供了哪些命令来检查指标小程序是否正在运行以避免为 Ubuntu 与非 Ubuntu 发行版编写不同的源代码?

Ted*_*uld 16

我认为这里的需求实际上更多地确定了 python-appindicator 库的存在。如果存在,它将支持您需要的所有回退情况。它将适当地处理 XFCE、KDE ​​和较旧的 GNOME。 在这个答案中如何做到这一点的好例子

appindicator 库将使用 DBus 来检查应用程序指示器渲染过程是否可用。这将是 Unity 的情况,或者如果指标小程序正在运行。如果可用,它将使用它,否则,它将回退到使用具有相同菜单的 GtkStatusIcon。

不幸的是,如果您想处理库不可用的情况,我相信您必须保留两个代码路径。不过,我们很乐意帮助在其他发行版中获得该库:)


Nat*_*man 10

我有一个在StackApplet 中运行良好的优秀解决方案- 我创建了一个功能等效的appindicator模块版本,gtk.StatusIcon当真正的模块不存在时,该版本在内部使用以提供相同的功能。

使用它很简单:

  1. 下载以下文件并调用appindicator_replacement.py
  2. 将以下内容添加到您的应用程序中:

    try:
        import appindicator
    except ImportError:
        import appindicator_replacement as appindicator
    
    Run Code Online (Sandbox Code Playgroud)

就是这样!现在,无论是否支持 AppIndicators,您的应用程序都将完美运行。假设您没有任何其他特定于平台的代码,它甚至可以在 Windows 上运行。


注意:该文件是在 MIT 许可下发布的 - 所以你几乎可以将它用于任何事情。


小智 9

您将需要为两者编写代码。您可以使用类似于以下内容的方法检测 Python 代码中 appindicator 的存在:

have_appindicator = True
try:
    import appindicator
except:
    have_appindicator = False
Run Code Online (Sandbox Code Playgroud)

从那里,使用 have_appindicator 来决定您应该使用 appindicator 代码还是 gtk_status_icon 代码。

不幸的是,这也意味着您需要同时拥有 Ubuntu 和另一个环境来进行测试。