AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 13197
Accepted
Takkat
Takkat
Asked: 2010-11-15 04:56:37 +0800 CST2010-11-15 04:56:37 +0800 CST 2010-11-15 04:56:37 +0800 CST

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

  • 772

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

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

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

  1. 应用程序的本地图标正确显示
  2. 该应用程序仍将运行并在未来的 Ubuntu 版本中显示它的图标。
  3. 该应用程序还将在未提供indicator-applet、libappindicator和python-appindicator的其他环境中运行并显示其图标。

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

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

development application-development python applet indicator
  • 4 4 个回答
  • 5278 Views

4 个回答

  • Voted
  1. Best Answer
    Ted Gould
    2010-11-16T07:42:08+08:002010-11-16T07:42:08+08:00

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

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

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

    • 16
  2. Nathan Osman
    2011-05-11T16:04:37+08:002011-05-11T16:04:37+08:00

    我有一个在StackApplet中运行良好的出色解决方案——我创建了一个功能等效的模块版本,appindicator当gtk.StatusIcon实际模块不存在时,它在内部使用以提供相同的功能。

    使用它很简单:

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

      try:
          import appindicator
      except ImportError:
          import appindicator_replacement as appindicator
      

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


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

    • 10
  3. jgoguen
    2010-11-15T06:06:27+08:002010-11-15T06:06:27+08:00

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

    have_appindicator = True
    try:
        import appindicator
    except:
        have_appindicator = False
    

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

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

    • 9
  4. OpenNingia
    2010-11-16T01:28:15+08:002010-11-16T01:28:15+08:00
    for line in os.popen("ps xa"): 
    fields = line.split() 
    pid = fields[0] 
    process = fields[4]
    
    applet_is_running = ( process.find('indicator-applet') > 0 )
    

    这样您就可以检测指标小程序是否正在运行。您无需担心 Ubuntu 11.04,因为情况并非如此。没有备用方案,因为指标小程序是一个强制组件,默认运行。

    • 3

相关问题

  • 指标小程序:如何摆脱时钟?

  • 如果顶部面板中缺少会话小程序,如何注销?

  • 删除在线状态菜单,但保留注销菜单?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve