2011-05-23 13 views
14

Gdy jestem w pociągu do pracy, podłączam swój netbook do hotspotu Nexusa One. Kiedy przejeżdżam przez tunel, telefon oczywiście traci połączenie 3G i po przywróceniu pociągu potrzeba trochę czasu. Ale logo netbook wifi pozostaje niezmienne, ponieważ nadal jest podłączone do samego telefonu.Prosty aplet panelu Gnome w języku Python

Napisałem mały program Pythona, który próbuje pingować serwer, a tym samym decyduje, czy Internet jest dostępny (możesz zaproponować metodę wykrywania połączenia internetowego, która byłaby szybsza lub wykorzystywałaby mniejszą przepustowość, ponieważ miesiąc).

Moje pytanie brzmi: jak mogę utworzyć aplet dla panelu GNOME 2.30.2 w Pythonie, aby wyświetlić graficznie ten status, więc mogę zdecydować, kiedy kontynuować klikanie linków i oczekiwać, że Internet będzie działał.

Mam ten example z przyciskiem panelu do pracy, ale chciałbym ikonę, która zmienia się w zależności od sytuacji.

Użyłem Pythona przez kilka lat, ale wcześniej nie napisałem kodu. Używam wersji pulpitu ubuntu jako mojego loginu zamiast jedności, 10.04.

+0

będę patrzeć jak iBus robi. –

Odpowiedz

9

Zapoznaj się z this simple applet I made. Ma ikonę, która zmienia się w zależności od wydarzeń. Po prostu zamień logikę na swoją logikę i powinna wystarczyć. Co więcej, powinien być kompatybilny ze wszystkimi środowiskami zgodnymi ze środowiskiem freedesktop.

+2

Świetny przykład, dziękuję. Tylko tak złożony, jak jest to wymagane do zadania, i nic więcej. –

+2

Stworzyłem projekt Github o nazwie [net-panel] (https://github.com/tomviner/net-panel), który spełnia moje potrzeby. –

+0

Hmm, na Ubuntu 12.04 po uruchomieniu nic nie robi. Czekam tylko na nowe zapytanie w linii poleceń, brak ikony, apletu lub cokolwiek innego. Czy są jakieś aktualizacje lub informacje o tym, co należy zmienić, aby uruchomić? – Alfe

3

Na przyszłość, to naprawdę ładny poradnik jak budować wskaźniki Gnome3: http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html

kompletny kod źródłowy:

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()