2011-12-17 19 views
19

メニューバーのアプリへの道を見てかなりの時間を過ごした後、私たちは敗北を認めることに近づいています。PythonでOSX用のメニューバー(システムトレイ)アプリケーションを作成するには?

基本的には、メニューバー(時計の隣にある小さなアイコン)に自分自身を配置し、メニューを持つアプリケーションの作成方法の例/ポインタを探しています。何も気にしない。

非常にやりやすいはずのような感じですが、動作するサンプルを見つけることができませんでした。

多分、Pythonでは不可能でしょうか?他の人たちがどのようにしているか知っていますか

+0

関連する質問:http://stackoverflow.com/questions/3104818/cross-platform-python-gui-suitable-for-taskbar-win-and-menubar-mac- functiona –

+1

[pyObjC](http://pyobjc.sourceforge.net/)はどうですか? – talonmies

+0

ありがとうございました!私はそれをインストールする際に問題があります。 easy_installを試しましたが、失敗しました。それから、ソースをダウンロードしてコンパイルしようとしましたが(python 2.7.1)、このエラーが出ます:error:Requirement.parse( 'pyobjc-framework-ServiceManagement == 2.4a0')に適切なディストリビューションが見つかりませんでした。このように思えば、何らかの作業が必要になるかもしれません。 – freeall

答えて

24

オプションは、rumpsを使用して、PyObjCの上に抽象レベルを提供することです。私は、これらのタイプのシンプルなステータスバーアプリケーションを迅速に生成するために具体的に書いています。

これは、少数の人々がシンプルで意味のある解決法を探して助けてくれることを願っています。

短い例のスニペットが続きます。デコレータは、クリックイベントとタイマーのコールバックとして関数を登録するために使用されます。 10.8の通知もサポートされています。おそらく

import rumps 

class AwesomeStatusBarApp(rumps.App): 
    def __init__(self): 
     super(AwesomeStatusBarApp, self).__init__("Awesome App") 
     self.menu = ["Preferences", "Silly button", "Say hi"] 

    @rumps.clicked("Preferences") 
    def prefs(self, _): 
     rumps.alert("jk! no preferences available!") 

    @rumps.clicked("Silly button") 
    def onoff(self, sender): 
     sender.state = not sender.state 

    @rumps.clicked("Say hi") 
    def sayhi(self, _): 
     rumps.notification("Awesome title", "amazing subtitle", "hi!!1") 

if __name__ == "__main__": 
    AwesomeStatusBarApp().run() 

pic

+0

サンプルコードをreadmeで実行しようとしましたが、「Quit」を除くすべてのメニュー項目が無効になっています。明示的にsetAction_を追加しない限り、メニュー項目は無効になります。これは期待される行動ですか? –

+0

私は 'port install py-pip && pip install pyobjc rumps'を実行して、動作例を得る必要がありました。ありがとう! – e40

12

wxPythonはタスクバーアイテムを追加できません。代わりに、そのようPyObjCを使用してこれを行うことができます。

from AppKit import NSStatusBar 
status_item = NSStatusBar.systemStatusBar().statusItemWithLength_(-1) #NSVariableStatusItemLength 
status_item.setImage_(<NSImage instance to status icon>) 

ただ、例えば、アイテムのものを行うためにNSStatusItemクラスリファレンスを参照してくださいメニューを追加する、ハイライト画像を変更するなど

+1

ありがとう、多くの感謝!今ではPyObjCをインストールすることができたら... – freeall

+1

pythonを使っているなら、pyobjcのeasy_installはうまくいくと思いますが、これをしないことをお勧めします - OSXはpyobjcにバンドルされています(私はLionとは分かりませんが、それがない場合は、easy_installを実行してください)。あなたがobjcまたはAppKitをインポートしてインストールしている場合、デフォルトのPythonをテストしてください – maranas

+0

ありがとうございます!それは昨日失われた数時間でした:)私は通常JavaScript(NodeJS)でプログラミングしていますので、Pythonは「電池が含まれている」ことを忘れてしまいました。 – freeall

関連する問題