PythonでGNOME用のアプレットを作成する

私はカルマと一時的に誤解していた尊敬されているVladXのリクエストでこの投稿を公開しています。



アプレットは、GNOMEパネルに直接埋め込むことができる小さなアプリケーションです。 通常、アプレットは特定の狭い機能(ボリュームの変更、デバイスのマウント)を実行します。これにより、アプレットはかさばるウィンドウアプリケーションと比較されます。 実際、知識のあるPythonコーダーが独自のアプレットを作成することは難しくありませんが、知らない人のための解決策があります。



行こう!



そこで、アプレットを作成しています。 アプレットは何かをしなければなりません。 たとえば、アプレットにはhabrakarmaとhabrasilが表示されます。 このすべての情報を取得するには、Habr APIを使用します



#!/ usr / bin / env python

#コーディング= utf-8

sysos 、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 #パネルにこれをすべて表示する

自己infoset_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 = StringIOStringIO

c = pycurl。 カール

c。 setopt pycurl。URL 、__URL__

c。 setopt pycurl。FOLLOWLOCATION1

c。 setopt pycurl。WRITEFUNCTIONcontent。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 および sysargv [ 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 および sysargv [ 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リソースが使用されました。



All Articles