2014-05-09 8 views
5

openweathermap 사이트 appindicator를 파이썬으로 작성하지만 아이콘없이 표시기에 텍스트 레이블 만 있으면됩니다. 하지만 내가 떠날 때 빈 아이콘을 보여줘. 왜, 나는 텍스트 만 필요합니다. Ubuntu 12.04에서 python-appindicator는 빈 아이콘을로드하지 않고 "우분투 14.04"에서 빈 아이콘을 남겨두면 아이콘이 필요 없습니다. 아이콘을 비활성화하는 방법 ?? 아이디어가 있으십니까?Gtk 3, python, appindicator, 레이블 근처의 아이콘 사용 안함

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

답변

3

내가 찾은 유일한 방법은 자신의 얇은 보이지 않는 아이콘을 사용하거나 또는 /usr/share/unity/icons/panel-shadow.png 또는 같은 PNG로 얇고 미묘한 기존 우분투를 사용하는 것입니다

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

그러나 1 픽셀 투명 아이콘을 사용하면 appindicator가 큰 공간을 차지하고 두 개의 인디케이터가 가까이 있지 않습니다. –

+1

나는 많은 연구를 해왔다. 그리고 그것은 내가 찾은 가장 간단한 해결책이다. AppIndicator 라이브러리를 사용하고 일종의 메뉴 라이브러리를 사용하여이를 수행 할 수있는 방법이 있지만 메뉴 시스템을 완전히 다시 작성해야합니다. 나는 그것에 대한 URL을 찾을 수 없습니다. – chimeraha