4

通知領域またはタスクバー/システムトレイ領域にある単純なアプリケーションを作成しようとしています。クロスプラットフォームにしたいので、wxPythonを使用しています。

このアプリケーションは、WindowsとLinuxで正常に動作しますが、Macintoshでは、TaskbarIconをクリックしたときにメインウィンドウを表示できません。TaskbarIconがドックに表示されるという事実に悩まされることはありません。これがないと私のアプリケーションは動作しないというだけです。

問題を再現できる簡略化されたコードを次に示します。

from views import embimgs                                     
import wx                                                     


class MyTaskBarIcon(wx.TaskBarIcon):                          

    def __init__(self, app):                                  
        wx.TaskBarIcon.__init__(self)                         

        self.app = app                                        

        self.Bind(wx.EVT_TASKBAR_LEFT_UP, self.on_left_up)    
        self.Bind(wx.EVT_TASKBAR_RIGHT_UP, self.on_right_up)  

    def on_left_up(self, evt):                                
        print 'Left upped!'                                   

    def on_right_up(self, evt):                               
        print 'Right upped!'                                  
        self.app.ExitMainLoop()                               


def main():                                                   
    app = wx.PySimpleApp()                                    
    mti = MyTaskBarIcon(app)                                  
    mti.SetIcon(wx.IconFromBitmap(embimgs.logo64.GetBitmap()))
    app.MainLoop()                                            
    app.Destroy()                                             


if __name__ == '__main__':                                    
    main()

WindowsおよびLinuxでは、アイコンを左クリックすると「Leftupped。」と表示されます。右クリックすると「右上」と表示され、アプリケーションが終了します。Macintoshでは、アイコンを左クリックしても、アイコンを点滅させる以外は何もしません。右クリックすると「右上」と表示され、アプリケーションが終了します。

4

1 に答える 1

1

ここで説明するように、Macでのみ利用可能な特定のアクションに対してオーバーライドできるいくつかの方法があります。

私の場合、wx.AppクラスのMacReopenAppメソッドをオーバーライドする必要がありました。このメソッドは、ユーザーがドックのアイコンをクリックするたびに呼び出されます。

たとえば、これをクラス内に追加するだけです。

    def MacReopenApp(self):
        print 'Dock Icon clicked!'

完了のために、他のメソッドは次のとおりです。MacOpenFile(self、filename)、MacNewFile(self)、およびMacPrintFile(self、file_path)

于 2013-01-03T11:28:40.473 に答える