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リソースが使用されました。

Source: https://habr.com/ru/post/J64317/


All Articles