2011-05-23 72 views
14

當我在火車上工作時,將我的上網本連接到我的Nexus One的wifi熱點。當我穿過隧道時,我的手機明顯失去了3G連接,一旦列車出現,需要一段時間才能重新建立。但是,上網本wifi標誌保持不變,因爲它仍然連接到手機本身。Python中的簡單侏儒面板小程序

我已經寫了一個小的python程序,試圖ping一臺服務器,從而決定是否可用互聯網(隨意提出一種檢測互聯網連接的方法,可以更快或使用更少的帶寬,因爲我被封鎖月)。

我的問題是:如何在Python中爲GNOME Panel 2.30.2創建一個小程序,以圖形方式顯示此狀態,以便我可以決定何時繼續單擊鏈接並期待Internet運行。

我得到這個example與面板按鈕來工作,但想要一個圖標,根據情況而改變。

我已經使用Python幾年了,但沒有編碼gnome之前。 10.04,我使用Ubuntu桌面版作爲我的登錄信息而不是統一信息。

+0

我想看看下iBus是怎麼做的。 – 2011-05-29 17:24:42

回答

9

結賬this simple applet I made。它有一個根據事件而變化的圖標。簡單地用你的邏輯代替邏輯,它應該做到這一點。更好的是,它應該兼容所有freedesktop兼容的環境。

+2

很好的例子,謝謝。只有完成任務所需的複雜任務,不再需要。 – 2011-06-01 08:08:27

+2

我現在已經創建了一個名爲[net-panel](https://github.com/tomviner/net-panel)的github項目來滿足我的需求。 – 2011-08-16 07:46:46

+0

嗯,在Ubuntu 12.04上,它在啓動時不會執行任何操作。我只是在命令行上等待新的提示,沒有圖標或小程序或任何顯示。是否有任何更新或信息要更改以便使其運行? – Alfe 2014-03-10 13:49:03

3

以供將來參考,關於如何建立指標GNOME3一個非常好的指南:http://candidtim.github.io/appindicator/2014/09/13/ubuntu-appindicator-step-by-step.html

完整的源代碼:

import signal 
import json 

from urllib2 import Request, urlopen, URLError 

from gi.repository import Gtk as gtk 
from gi.repository import AppIndicator3 as appindicator 
from gi.repository import Notify as notify 


APPINDICATOR_ID = 'myappindicator' 

def main(): 
    indicator = appindicator.Indicator.new(APPINDICATOR_ID, 'sample_icon.svg', appindicator.IndicatorCategory.SYSTEM_SERVICES) 
    indicator.set_status(appindicator.IndicatorStatus.ACTIVE) 
    indicator.set_menu(build_menu()) 
    notify.init(APPINDICATOR_ID) 
    gtk.main() 

def build_menu(): 
    menu = gtk.Menu() 
    item_joke = gtk.MenuItem('Joke') 
    item_joke.connect('activate', joke) 
    menu.append(item_joke) 
    item_quit = gtk.MenuItem('Quit') 
    item_quit.connect('activate', quit) 
    menu.append(item_quit) 
    menu.show_all() 
    return menu 

def fetch_joke(): 
    request = Request('http://api.icndb.com/jokes/random?limitTo=[nerdy]') 
    response = urlopen(request) 
    joke = json.loads(response.read())['value']['joke'] 
    return joke 

def joke(_): 
    notify.Notification.new("<b>Joke</b>", fetch_joke(), None).show() 

def quit(_): 
    notify.uninit() 
    gtk.main_quit() 

if __name__ == "__main__": 
    signal.signal(signal.SIGINT, signal.SIG_DFL) 
    main()