2014-05-09 1 views
5

J'écris openindows appindicator de site en python, mais je n'ai besoin que d'étiquette de texte dans l'indicateur sans icône. Mais quand je pars "" alors montrez-moi l'icône vide. Pourquoi, j'ai seulement besoin de texte. Dans Ubuntu 12.04, python-appindicator n'a pas besoin d'une icône si vous laissez "" alors ne pas charger une icône vide, mais dans Ubuntu 14.04, laissez l'icône vide. Comment désactiver l'icône? Des idées?Gtk 3, python, appindicator, icône de désactivation près de l'étiquette

#!/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() 

Répondre

3

La seule façon que j'ai trouvé est d'utiliser soit votre propre icône mince invisible ou d'utiliser une ubuntu existante fine et subtile, comme .png ou /usr/share/unity/icons/panel-shadow.png Vous pouvez implémenter un peu des deux:

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

Mais si j'utilise une icône transparente de 1 pixel, alors appindicator fait un grand espace, et deux indicateurs proches ne sont pas proches. –

+1

J'ai fait beaucoup de recherches et c'est la solution la plus simple que j'ai trouvée. Il pourrait y avoir un moyen de le faire sans utiliser la bibliothèque AppIndicator et en utilisant une sorte de bibliothèque de menus, mais cela nécessiterait une réécriture complète du système de menus. Je ne peux pas trouver l'URL pour cela cependant. – chimeraha

Questions connexes