有问题的应用程序会执行一些操作(此处将音频连接到网络流)并在这些操作成功时最小化运行。因此需要一个状态图标来显示连接的状态(例如CONNECTED/DISCONNECTED)。只有当单击图标时,应用程序窗口才会打开以访问更多选项。
使用 Python 2.6 和 pyGtk,我通过使用gtk_status_icon方便地实现了这一点。我特意编写了应用程序以在尽可能多的发行版上运行,包括各种 Ubuntu 版本。只有在用户安装它们之后,我才注意使用可能的依赖项。
但是现在我听说 gtk_status_icon 在未来的 Ubuntu 版本中将不再受支持。开发人员被要求改用应用程序指标。那么最佳实践是什么,以确保:
- 应用程序的本地图标正确显示
- 该应用程序仍将运行并在未来的 Ubuntu 版本中显示它的图标。
- 该应用程序还将在未提供indicator-applet、libappindicator和python-appindicator的其他环境中运行并显示其图标。
如果指示器小程序没有运行,应用程序指示器回退机制到 gtk_status_icon 将不起作用。如果没有可导入的appindicator模块,Python 解释器将不会运行。我是否需要为不同的发行版开发不同的版本,或者有更好的方法来解决这个问题。
除了Ubuntu Wiki中给出的示例之外,我在哪里可以找到有关如何使用 ApplicationIndicator 的文档?提供了哪些命令来检查指标小程序是否正在运行以避免为 Ubuntu 和非 Ubuntu 发行版编写不同的源代码?
我认为这里的需要实际上更多地确定了 python-appindicator 库的存在。如果存在,它将支持您需要的所有后备案例。它将适当地处理 XFCE、KDE 和较旧的 GNOME。 在这个答案中如何做到这一点的好例子。
appindicator 库将使用 DBus 来检查应用指标渲染进程是否可用。这将是 Unity 上的情况,或者指标小程序正在运行时。如果可用,它将使用它,如果不可用,它将回退到使用具有相同菜单的 GtkStatusIcon。
不幸的是,如果您想处理库不可用的情况,我相信您必须保留两个代码路径。不过,我们很乐意帮助在其他发行版中获取该库 :)
我有一个在StackApplet中运行良好的出色解决方案——我创建了一个功能等效的模块版本,
appindicator
当gtk.StatusIcon
实际模块不存在时,它在内部使用以提供相同的功能。使用它很简单:
appindicator_replacement.py
将以下内容添加到您的应用程序中:
而已!现在,无论是否支持 AppIndicators,您的应用程序都将完美运行。假设您没有任何其他特定于平台的代码,它甚至可以在 Windows 上运行。
注意:该文件是在 MIT 许可下发布的 - 所以你几乎可以将它用于任何事情。
您将需要为两者编写代码。您可以使用类似于以下内容的方式检测 Python 代码中是否存在 appindicator:
从那里,使用 have_appindicator 来决定您应该使用 appindicator 代码还是 gtk_status_icon 代码。
不幸的是,这也意味着您需要同时拥有一个 Ubuntu 和另一个环境来进行测试。
这样您就可以检测指标小程序是否正在运行。您无需担心 Ubuntu 11.04,因为情况并非如此。没有备用方案,因为指标小程序是一个强制组件,默认运行。