【问题标题】:Simple Gnome Panel Applet in PythonPython 中的简单 Gnome 面板小程序
【发布时间】:2011-08-30 23:19:48
【问题描述】:

当我在上班的火车上时,我将上网本连接到 Nexus One 的 wifi 热点。当我穿过隧道时,我的手机显然失去了 3G 连接,并且在火车出现后需要一段时间才能重新建立。但上网本 wifi 标志保持不变,因为它仍然连接到手机本身。

我写了一个小 Python 程序,它尝试 ping 一个服务器,从而决定互联网是否可用(请随意提出一种检测互联网连接的方法,这种方法要么更快,要么使用更少的带宽,因为我每个月都有上限)。

我的问题是:如何在 Python 中为 GNOME Panel 2.30.2 创建一个小程序,以图形方式显示此状态,以便我可以决定何时继续单击链接并期待互联网正常工作。

我得到了这个带有面板按钮的example,但想要一个根据情况而变化的图标。

我已经使用 Python 几年了,但之前没有编写过 gnome 代码。我在 10.04 使用 ubuntu 桌面版作为我的登录而不是统一。

【问题讨论】:

  • 我会看看IBus是怎么做的。

标签: python panel gnome


【解决方案1】:

查看this simple applet I made。它有一个根据事件而变化的图标。只需用您的逻辑替换逻辑,它就可以解决问题。更好的是,它应该兼容所有与 freedesktop 兼容的环境。

【讨论】:

  • 很好的例子,谢谢。仅与任务所需的一样复杂,仅此而已。
  • 我现在创建了一个 github 项目,名为 net-panel 以满足我的需求。
  • 嗯,在 Ubuntu 12.04 上,它在启动时什么都不做。我只是在等待命令行上的新提示,没有图标或小程序或任何出现。是否有任何更新或信息说明要更改哪些内容才能使其运行?
  • 我虽然指南是粘贴代码,因为有时链接可能会失效。请将代码粘贴到您的答案中,因为该链接确实已失效。
  • @static_rtti 我大约两年前使用了你的代码。试图在我的磁盘上找到它,但无济于事。伤心。
【解决方案2】:

供将来参考,关于如何为 Gnome3 构建指标的非常好的指南:http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html

完整的源代码:

import signal
import json

from urllib2 import Request, urlopen, URLError

from gi.repository import Gtk as gtk
from gi.repository import AppIndicator3 as appindicator
from gi.repository import Notify as notify


APPINDICATOR_ID = 'myappindicator'

def main():
    indicator = appindicator.Indicator.new(APPINDICATOR_ID, 'sample_icon.svg', appindicator.IndicatorCategory.SYSTEM_SERVICES)
    indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
    indicator.set_menu(build_menu())
    notify.init(APPINDICATOR_ID)
    gtk.main()

def build_menu():
    menu = gtk.Menu()
    item_joke = gtk.MenuItem('Joke')
    item_joke.connect('activate', joke)
    menu.append(item_joke)
    item_quit = gtk.MenuItem('Quit')
    item_quit.connect('activate', quit)
    menu.append(item_quit)
    menu.show_all()
    return menu

def fetch_joke():
    request = Request('http://api.icndb.com/jokes/random?limitTo=[nerdy]')
    response = urlopen(request)
    joke = json.loads(response.read())['value']['joke']
    return joke

def joke(_):
    notify.Notification.new("<b>Joke</b>", fetch_joke(), None).show()

def quit(_):
    notify.uninit()
    gtk.main_quit()

if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多