2011-05-23 29 views
14

Cuando estoy en el tren para ir al trabajo, conecto mi netbook al punto de acceso wifi de mi Nexus One. Al pasar por un túnel, mi teléfono obviamente pierde su conexión 3G y tarda un tiempo en restablecerse una vez que sale el tren. Pero el logotipo wifi de la netbook se mantiene constante ya que aún está conectado al teléfono.Applet simple de Gnome Panel en Python

He escrito un pequeño programa python que intenta hacer ping a un servidor y decide si internet está disponible (no dude en sugerir un método de detección de conexión de Internet que sea más rápido o use menos ancho de banda ya que estoy limitado mes).

Mi pregunta es: ¿cómo puedo crear un applet para GNOME Panel 2.30.2 en Python, para visualizar gráficamente este estado, para que pueda decidir cuándo continuar haciendo clic en enlaces y esperando que Internet funcione.

Obtuve este example con un botón de panel para trabajar pero me gustaría un ícono que cambia según la situación.

He usado Python desde hace unos años no he codificado sino gnome antes. Estoy usando la edición de escritorio ubuntu como inicio de sesión en lugar de unidad, en 10.04.

+0

me vería en la forma IBus lo hace. –

Respuesta

9

Echa un vistazo this simple applet I made. Tiene un ícono que cambia dependiendo de los eventos. Simplemente reemplace la lógica con su lógica y debería hacer el truco. Mejor aún, debería ser compatible con todos los entornos compatibles con freedesktop.

+2

Gran ejemplo, gracias. Solo lo complejo que se requiera para la tarea, y nada más. –

+2

Ahora he creado un proyecto github, llamado [net-panel] (https://github.com/tomviner/net-panel) que satisface mis necesidades. –

+0

Hmm, en Ubuntu 12.04 no hace nada cuando se inicia. Estoy esperando un nuevo aviso en la línea de comando, no aparece ningún icono o applet o lo que sea. ¿Hay alguna actualización o información sobre qué cambiar para que funcione? – Alfe

3

Para referencia futura, una muy buena guía sobre cómo construir indicadores para Gnome3: http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html

código fuente completo:

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