Простой апплет Gnome Panel в Python - PullRequest
14 голосов
/ 23 мая 2011

Когда я еду на поезде на работу, я подключаю свой нетбук к точке доступа Wi-Fi в Nexus One.Когда я прохожу через туннель, мой телефон, очевидно, теряет соединение 3G и требует много времени для восстановления после того, как поезд прибывает.Но логотип Wi-Fi на нетбуке остается постоянным, поскольку он все еще подключен к самому телефону.

Я написал небольшую программу на Python, которая пытается пропинговать сервер и, таким образом, решает, доступен ли Интернет (не стесняйтесь предложить методобнаружения интернет-соединения, которое было бы либо быстрее, либо использовало бы меньшую пропускную способность, поскольку я ограничен в месяц).

Мой вопрос: как я могу создать апплет для GNOME Panel 2.30.2 в Python, чтобы графически отобразить этостатус, поэтому я могу решить, когда продолжать нажимать на ссылки и ожидать, что интернет будет работать.

Я получил этот пример с кнопкой панели, но хотел бы, чтобы значок менялся в зависимости от ситуации..

Я использовал Python несколько лет, но раньше не кодировал гномов.Я использую настольную версию Ubuntu в качестве логина, а не единства, 10.04.

Ответы [ 2 ]

9 голосов
/ 31 мая 2011

Проверьте этот простой апплет, который я сделал . У него есть значок, который меняется в зависимости от событий. Просто замените логику своей логикой, и она должна сработать. Более того, он должен быть совместим со всеми совместимыми с freedesktop средами.

4 голосов
/ 18 мая 2015

Для дальнейшего использования, действительно хорошее руководство о том, как строить индикаторы для 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()
...