アプレットは、GNOMEパネルに直接埋め込むことができる小さなアプリケーションです。 通常、アプレットは特定の狭い機能(ボリュームの変更、デバイスのマウント)を実行します。これにより、アプレットはかさばるウィンドウアプリケーションと比較されます。 実際、知識のあるPythonコーダーが独自のアプレットを作成することは難しくありませんが、知らない人のための解決策があります。
行こう!
そこで、アプレットを作成しています。 アプレットは何かをしなければなりません。 たとえば、アプレットにはhabrakarmaとhabrasilが表示されます。 このすべての情報を取得するには、Habr APIを使用します 。
#!/ usr / bin / env python
#コーディング= utf-8
sys 、 os 、gtk、gtkをインポートします。 gdk 、pygtk、gnomeapplet、gnome
pygtk。 require ( '2.0' )
__USER__ = 'VladX'
__URL__ = 'http://habrahabr.ru/api/profile/' + __USER__
これがアプレットの始まりです。 ここではすべてが明確です-必要なライブラリをインポートし、必要なパラメーターを変数に入力します。 ロシア語の文字に関する問題を避けるために、UTF-8エンコードを使用します(そして、ちなみに、常に同じことを行うことをお勧めします)。
クラス MyApplet ( gnomeapplet。Applet ) :
def __init__ ( self 、applet、iid ) :
自己 。 アプレット =アプレット
自己 。 アプレット 。 set_name ( 'MyApplet' )
自己 。 hbox = gtk。 HBox ( )
自己 。 アプレット 。 追加 ( self。hbox )
自己 。 イベント = gtk。 イベントボックス ( )
自己 。 hbox add ( self。event )
自己 。 info = gtk。 ラベル ( )
自己 。 イベント add ( self。info ) #オブジェクトがさまざまなイベントに応答するには、イベントボックスに配置する必要があります
自己 。 イベント set_tooltip_text ( 'Habrauser' + __USER__ )
自己 。 イベント 接続 ( 'button-press-event' 、 self。callback_button )
self .__ init_popupmenu ( )
自己 。 アプレット 。 connect ( 'destroy' 、 self。callback_destroy )
自己 。 アプレット 。 show_all ( ) #パネルにこれをすべて表示する
自己 。 info 。 set_text ( self。get_info ( ) )
def __init_popupmenu ( self ) :
自己 。 アプレット 。 setup_menu ( '' '
<ポップアップ名= ' button3 '>
<menuitem name = ' Open Item ' verb = ' Open ' stockid = ' gtk- open ' />
<menuitem name = ' About Item ' verb = ' About ' stockid = ' gtk-about ' />
</ popup> ' ' ' 、 [
( 'Open' 、 self。Callback_open ) 、
( 'About' 、 self。Callback_about )
] 、 なし )
def get_info ( self ) :
'' 'たとえば、Pycurlを使用してリクエストを行います' ''
インポート pycurl、 StringIO
content = StringIO 。 StringIO ( )
c = pycurl。 カール ( )
c。 setopt ( pycurl。URL 、__URL__ )
c。 setopt ( pycurl。FOLLOWLOCATION 、 1 )
c。 setopt ( pycurl。WRITEFUNCTION 、 content。write ) #応答を変数に書き込むメソッドを設定します
c。 実行 ( )
c。 閉じる ( )
コンテンツ=コンテンツ。 getvalue ( )
'' 'Parsimコード' ''
試してください :
カルマ=コンテンツ[コンテンツ。 インデックス ( '<karma>' ) + 7 :コンテンツ。 インデックス ( '</ karma>' ) ]
を除く :
カルマ= '*'
試してください :
評価=コンテンツ[コンテンツ。 インデックス ( '<rating>' ) + 8 :コンテンツ。 インデックス ( '</ rating>' ) ]
を除く :
評価= '*'
カルマ+ '/' +評価を返す
def callback_button ( self 、widget、event ) :
自己 。 callback_open ( self )
def callback_open ( self 、event、data = None ) :
'' 「クリックしてブラウザで開く」 ''
ノーム。 url_show (
'http://' +
__USER__。 replace ( '_' 、 '-' ) + #サブドメインのアンダースコアをハイフンに置き換えます
'.habrahabr.ru /'
)
def callback_about ( self 、event、data = None ) :
'' '標準GNOMEウィンドウの表示' ''
os 。 システム ( 'gnome-about' )
def callback_destroy ( self 、applet ) :
'' 'オブジェクトを破壊する' ''
デル・ セルフ 。 アプレット
実際、これはアプレットの最も興味深い部分です。 __init__ ()コンストラクターメソッドはオブジェクトを初期化し、 __init_popupmenu()メソッドは[開く]および[ バージョン情報 ]コマンドをコンテキストメニューに追加し、対応するコールバックメソッドを設定します。 get_info()メソッドはサーバーから応答を受け取り、カルマと強さの大切な数のためにそれを処理します。 このような簡単なタスクで特別なxmlパーサーを使用するのは愚かなことなので、単純なbydcoderの方法で行います。
def applet_factory ( applet、iid ) :
MyApplet (アプレット、iid )
真を 返す
def main ( args ) :
if len ( sys。argv ) == 2 および sys 。 argv [ 1 ] == 'run-in-window' :
window = gtk。 ウィンドウ ( gtk。WINDOW_TOPLEVEL )
ウィンドウ。 set_title ( 'うまくいく!' )
ウィンドウ。 接続 ( 'destroy' 、 gtk。main_quit )
アプレット= gnomeapplet。 アプレット ( )
applet_factory (アプレット、 なし )
アプレット。 親 (ウィンドウ)
ウィンドウ。 show_all ( )
gtk。 メイン ( )
sys 終了 ( )
elif len ( sys。argv ) == 2 および sys 。 argv [ 1 ] == 'help' :
'' 'パラメータによるヘルプの出力' ''
印刷 '' '
--run-in-window-gnome-panelから独立してアプレットを実行
--help-このメッセージを表示する ' ' '
その他 :
gnomeapplet bonobo_factory ( 'OAFIID:GNOME_MyApplet_Factory' 、
MyApplet .__ gtype__、
「私のアプレット」 、
'1.0' 、
applet_factory )
__name__ == '__main__'の場合 :
main ( sys。argv )
これらの関数は、ほとんどのPythonアプレットで同じです。bonobo_factoryメソッドに渡された引数を自分のものに変更するだけです。
また、便利な点が1つあります。スクリプトに--run-in-windowパラメーターを渡すと、アプレットは別のウィンドウで実行されるため、デバッグ時に非常に役立ちます。
まあ、それがすべてのようです。 しかし、いいえ-アプレットは書かれていますが、gnomeアプレットのリストにはありません。 これを修正するには、次のようなディレクトリ/ usr / lib64 / bonobo / serversにファイル(この場合はgnomeMyAppletFactory.serverという名前を使用できます)を配置する必要があります。
< oaf_info >
< oaf_server iid = 'OAFIID:GNOME_MyApplet_Factory' type = 'exe' location = '/home/vlad/applets/src/habrapplet.py' >
< oaf_attribute name = 'repo_ids' type = 'stringv' >
<アイテム値= 'IDL:Bonobo / GenericFactory:1.0' / >
<アイテム値= 'IDL:Bonobo /不明:1.0' / >
< / oaf_attribute >
< oaf_attribute name = 'name' type = 'string' value = 'My Applet' / >
< oaf_attribute name = 'description' type = 'string' value = 'Show your karma and ratio' / >
< / oaf_server >
< oaf_server iid = 'OAFIID:GNOME_MyApplet' type = 'factory' location = 'OAFIID:GNOME_MyApplet_Factory' >
< oaf_attribute name = 'repo_ids' type = 'stringv' >
<アイテム値= 'IDL:GNOME / Vertigo / PanelAppletShell:1.0' / >
<項目値= 'IDL:Bonobo / Control:1.0' / >
<アイテム値= 'IDL:Bonobo /不明:1.0' / >
< / oaf_attribute >
< oaf_attribute name = 'name' type = 'string' value = 'My First Applet' / >
< oaf_attribute name = 'name-ru' type = 'string' value = 'Habrapplet' / >
< oaf_attribute name = 'description' type = 'string' value = 'Show your karma and ratio' / >
< oaf_attribute name = 'description-ru' type = 'string' value = 'Displays your karma and habrasil' / >
< oaf_attribute name = 'panel:category' type = 'string' value = 'Utility' / >
< oaf_attribute name = 'panel:icon' type = 'string' value = 'computer.png' / >
< / oaf_server >
< / oaf_info >
スクリプトへのパスを独自のものに変更し、 chmod + xを使用してその実行を許可することを忘れないでください。
良いコーディング、%ユーザー名%!
ps素材の準備では、 highlight.hohli.comリソースが使用されました。