2014-05-09 16 views
5

Scrivo aprowindice appindicator del sito in python, ma ho bisogno solo dell'etichetta di testo nell'indicatore senza icona. Ma quando esco "" quindi mostrami l'icona vuota. Perché, ho bisogno solo del testo. In Ubuntu 12.04 python-appindicator non serve un'icona se si lascia "" allora non si carica un'icona vuota, ma in ubuntu 14.04 lascia l'icona vuota. Come disabilitare l'icona ?? Qualche idea?Gtk 3, python, appindicator, icona di disabilitazione vicino all'etichetta

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import sys 
import urllib2 
import json 
import time 
import datetime 

from gi.repository import Gtk, Gdk, GLib, GObject 
from gi.repository import AppIndicator3 as appindicator 

class programa: 

    def __init__(self): 
    # Create Indicator with icon and label 
     # If leave empty "" then load empty icon 
     self.ind = appindicator.Indicator.new("Weather","",appindicator.IndicatorCategory.APPLICATION_STATUS) 
     self.ind.set_status(appindicator.IndicatorStatus.ACTIVE) # 
     self.menu_structure() 

    # Menu structure 
    def menu_structure(self): 
     refresh  = 720 # Refresh interval in seconds 
     url   = urllib2.Request('http://api.openweathermap.org/data/2.5/weather?q=siauliai&units=metric') 
     openup  = urllib2.urlopen(url) # open url 
     json_string = openup.read() #read data 
     parsed_json = json.loads(json_string) 

     # Get data 
     temp   = parsed_json['main']['temp'] # Temperature in metric system 
     wind   = parsed_json['wind']['speed'] # Wind speed 
     humidity  = parsed_json['main']['humidity'] 
     clouds  = parsed_json['clouds']['all'] 
     weather  = parsed_json['weather'][0]['main'] 
     weather_desc = parsed_json['weather'][0]['description'] 
     update_time = parsed_json['dt'] 
     updated  = datetime.datetime.fromtimestamp(int(update_time)).strftime('%H:%M') 
     # GTK menu 
     self.menu   = Gtk.Menu() 
     self.menu_updated = Gtk.MenuItem("Updatet: "+updated) 
     self.menu_weather = Gtk.MenuItem("Weather: "+weather) 
     self.menu_desc  = Gtk.MenuItem("Desc: "+weather_desc) 
     self.menu_clouds = Gtk.MenuItem("Clouds: "+str(clouds)+"%") 
     self.menu_humidity = Gtk.MenuItem("Humidity: "+str(humidity)+"%") 
     self.menu_wind  = Gtk.MenuItem("Wind: "+str(wind)+" m/s") 
     self.separator  = Gtk.SeparatorMenuItem() 
     self.exit   = Gtk.MenuItem("Exit") 
     self.exit.connect("activate", self.quit)  

     #show menu 
     self.menu_updated.show() 
     self.menu_weather.show() 
     self.menu_desc.show() 
     self.menu_clouds.show() 
     self.menu_humidity.show() 
     self.menu_wind.show() 
     self.separator.show() 
     self.exit.show() 

     # Append menu 
     self.menu.append(self.menu_updated) 
     self.menu.append(self.menu_weather) 
     self.menu.append(self.menu_desc) 
     self.menu.append(self.menu_clouds) 
     self.menu.append(self.menu_humidity) 
     self.menu.append(self.menu_wind) 
     self.menu.append(self.separator) 
     self.menu.append(self.exit) 

     self.ind.set_menu(self.menu) 

     # Set label in celcius temperature 
     self.ind.set_label(str(temp)+u"\u2103".encode('utf-8'),"") 

     # close url 
     openup.close() 

     # Refresh indicator 
     GLib.timeout_add_seconds(refresh,self.menu_structure) 

    def quit(self, widget): 
     sys.exit(0) 

if __name__ == "__main__": 
    indicator = programa() 
    Gtk.main() 

risposta

3

L'unico modo che ho trovato è usare sia per la propria icona invisibile sottile o per usare un sottile e sottile ubuntu esistenti png come /usr/share/unity/icons/panel-shadow.png o è possibile implementare un po 'di entrambi:

icon_image = os.path.dirname(__file__) + "/my_thin_inv_icon.png" 
if not os.path.isfile(icon_image): 
    icon_image = "/usr/share/unity/icons/panel-shadow.png" 

self.ind = appindicator.Indicator.new("Weather",icon_image,appindicator.IndicatorCategory.APPLICATION_STATUS) 
+1

Ma se io uso 1 pixel icona trasparente, l'appindicatore ha un grande spazio e due indicatori vicini non sono vicini. –

+1

Ho fatto un sacco di ricerche ed è la soluzione più semplice che ho trovato. Potrebbe esserci un modo per farlo senza usare la libreria AppIndicator e usando una sorta di libreria di menu, ma ciò richiederebbe una completa riscrittura del sistema di menu. Non riesco a trovare l'url per questo però. – chimeraha