4

我正在尝试创建一个驻留在通知区域或任务栏/系统托盘区域的简单应用程序。我希望它是跨平台的,所以这就是我使用 wxPython 的原因。

该应用程序在 Windows 和 Linux 下运行良好,但在 Macintosh 下,单击 TaskbarIcon 时无法显示主窗口。TaskbarIcon 出现在 Dock 中这一事实并不困扰我。只是我的应用程序没有这个就无法工作。

这是一些可以重现问题的简化代码:

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.”,然后应用程序退出。

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 回答