2010-07-13 24 views
1

使用wxPython,我创建了一个任务栏图标和菜单。 右键单击该图标后,一切正常(至少在Windows中):即显示菜单,并在您单击其他位置(如Windows的任务栏上)时自动隐藏。wxPython:如何使任务栏图标响应左键点击

现在我确实想让菜单出现在图标被左键单击时。 所以我插入Bind()到左单击框类包装,调用任务栏图标的CreatePopupMenu()

import wx 
class BibTaskBarIcon(wx.TaskBarIcon): 
    def __init__(self, frame): 
     wx.TaskBarIcon.__init__(self) 
     self.frame = frame 
     icon = wx.Icon('test_icon.ico', wx.BITMAP_TYPE_ICO) 
     self.SetIcon(icon, "title") 

    def CreatePopupMenu(self): 
     self.menu = wx.Menu() 
     self.menu.Append(wx.NewId(), "dummy menu ") 
     self.menu.Append(wx.NewId(), "dummy menu 2") 
     return self.menu 

class TaskBarFrame(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, style=wx.FRAME_NO_TASKBAR) 
     ... 
     self.tbicon = BibTaskBarIcon(self) 
     wx.EVT_TASKBAR_LEFT_UP(self.tbicon, self.OnTaskBarLeftClick) 
     ... 

    def OnTaskBarLeftClick(self, evt): 
     self.PopupMenu(self.tbicon.CreatePopupMenu()) 

    ... 
def main(argv=None): 
    app = wx.App(False) 
    TaskBarFrame(None, "testing frame") 
    app.MainLoop() 

这工作得很好,除了当您单击菜单不会自动消失屏幕上的其他位置。实际上,图标上多次左键单击会创建多个菜单。隐藏菜单的唯一方法是点击其中一个项目(您并不总是想要)。我查看了TaskbarIcon的可用方法,但是我没有清楚要使用哪一个来隐藏菜单(.Destroy()不起作用)。此外,我不知道要绑定到哪个事件(有一个EVT_SET_FOCUS,但我找不到任何EVT_LOOSE_FOCUS或类似)。

那么,如何在失去焦点时隐藏菜单?

编辑:我插入更多的代码,以使其更清晰

+0

你能告诉什么是BibTaskBarIcon吗?如果您可以提供可以在复制粘贴上运行并显示问题的简单代码,那将会更好。 – 2010-07-14 04:34:57

+0

我已经扩展了代码。现在它是复制粘贴准备好的,除了图标文件 – Rabarberski 2010-07-14 07:04:40

+0

猜猜你正在使用Windows,因为点击其他地方,即使在图标关闭菜单。 (ubuntu) – 2010-07-14 16:58:30

回答

3

啊,我发现了什么问题。在声明

self.PopupMenu(self.tbicon.CreatePopupMenu()) 

我已经弹出菜单绑定到框架,而不是任务栏图标。

,改成:

self.tbicon.PopupMenu(self.tbicon.CreatePopupMenu()) 

所有目前运作良好。

感谢所有评论

0

我觉得这里的问题是,PopupMenu的是在程序的情况下通常使用的系统不是一个小图标托盘。这意味着在一个正常的框架中,弹出式菜单会检测您点击它的点击。在这里,你正在点击wxPython程序之外。另外,PopupMenu通常与EVT_CONTEXT_MENU一起使用,而不是此任务栏事件。

你可以试试wx.EVT_KILL_FOCUS,看看它是否可行,因为当你点击菜单时它理论上应该会触发。或者,你可以要求在官方论坛的wxPython这里:http://groups.google.com/group/wxpython-users/topics


迈克·德里斯科尔

博客:http://blog.pythonlibrary.org