2012-12-19 28 views
4

我試圖創建一個簡單的應用程序駐留在通知區域或任務欄/系統托盤區域。我希望它是跨平臺的,所以這就是我使用wxPython的原因。Macintosh wxPython EVT_TASKBAR_LEFT_UP或替代

該應用程序在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左鍵點擊該圖標打印;「左調升。」右鍵點擊'Right upped',然後應用程序退出。 在Macintosh上,左鍵單擊該圖標不會執行任何操作,除了閃爍圖標;右鍵點擊'Right upped',然後應用程序退出。

回答

0

如解釋here有幾種方法可以覆蓋某些僅在mac上可用的操作。

在我的情況下,我只需要重寫wx.App類的MacReopenApp方法。 每次用戶單擊擴展塢中的圖標時都會調用此方法。

例如只在類中添加此:

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

剛剛完成,其他的方法是:MacOpenFile(個體經營,文件名),MacNewFile(個體經營)和MacPrintFile(個體經營,FILE_PATH)

+0

這適用於碼頭中的圖標,但這不是「TaskBarIcon」。如果你在OSX下創建一個TaskBarIcon,它會出現在頂部的菜單欄中,這個解決方案不會幫助從那裏獲取事件:( – GreenAsJade

+0

是的,對於頂部菜單欄上實際的*系統托盤*圖標,看起來似乎在* unstable *(當時是2.9x)版本的** wxPython **中實現的功能,可以在新的穩定版本3.x中實現,我需要重新檢查。 –

+0

我在3。 x的wxPython(2.7 Python)問題仍然存在。 – GreenAsJade