Gtk 3, python, appindicator, disable icon near label
Asked Answered
L

1

8

I write openweathermap site appindicator in python, but i need only text label in indicator without icon. But when i leave "" then show me empty icon. Why, i need only text. In Ubuntu 12.04 python-appindicator don't need a icon if leave "" then not load a empty icon, but in ubuntu 14.04 leave empty icon. How to disable the icon?? Any ideas?

#!/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()
Laudatory answered 9/5, 2014 at 15:43 Comment(0)
H
3

The only way I've found is to either use your own thin invisible icon or to use a thin and subtle existing ubuntu png such as /usr/share/unity/icons/panel-shadow.png or you could implement a little of both:

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)
Haemal answered 26/5, 2014 at 5:17 Comment(2)
But if i use 1 pixel transparent icon, then appindicator did large space, and two near indicators are not near.Hottempered
I've done a bunch of research and it's the simplest solution I've found. There might be a way to do it with out using the AppIndicator library and using some sort of Menu library, but that would require a complete rewrite of the menu system. I can't find the url for it though.Haemal

© 2022 - 2024 — McMap. All rights reserved.