2014-05-09 15 views
5

Tôi viết trình tạo trang web openweathermap trong python, nhưng tôi chỉ cần nhãn văn bản trong chỉ báo không có biểu tượng. Nhưng khi tôi rời khỏi "" thì hãy hiển thị biểu tượng trống. Tại sao, tôi chỉ cần văn bản. Trong Ubuntu 12.04 python-appindicator không cần một biểu tượng nếu để "" sau đó không tải một biểu tượng rỗng, nhưng trong ubuntu 14.04 để trống biểu tượng. Làm thế nào để tắt biểu tượng ?? Bất kỳ ý tưởng nào?Gtk 3, python, appindicator, vô hiệu hóa biểu tượng gần nhãn

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

Trả lời

3

Cách duy nhất tôi đã tìm thấy là để thể sử dụng biểu tượng mỏng vô hình của riêng bạn hoặc sử dụng một ubuntu hiện mỏng và tinh tế png như /usr/share/unity/icons/panel-shadow.png hoặc bạn có thể thực hiện một chút của cả hai:

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

Nhưng nếu tôi sử dụng biểu tượng trong suốt 1 pixel thì appindicator đã làm không gian rộng và hai chỉ báo gần không ở gần. –

+1

Tôi đã thực hiện một loạt các nghiên cứu và đó là giải pháp đơn giản nhất mà tôi đã tìm thấy. Có thể có một cách để làm điều đó bằng cách sử dụng thư viện AppIndicator và sử dụng một số loại thư viện Menu, nhưng điều đó sẽ yêu cầu viết lại hoàn toàn hệ thống menu. Tôi không thể tìm thấy url cho nó mặc dù. – chimeraha

Các vấn đề liên quan