2012-12-19 13 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