wxPython:如何使任务栏图标响应leftcli

2024-10-01 09:23:37 发布

您现在位置:Python中文网/ 问答频道 /正文

使用wxPython,我创建了一个任务栏图标和菜单。 右击图标,一切正常(至少在Windows中):也就是说,菜单被显示,当你点击其他地方时,菜单会自动隐藏,比如在Windows的任务栏上。在

现在我确实想让菜单出现时,图标是左键点击以及。 因此,我在框架类包装器的左键单击中插入了一个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,但我找不到任何{}或类似的事件)。在

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

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


Tags: 方法selfinitwindowsdef菜单frame图标
2条回答

啊,我发现哪里出了问题。在声明中

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

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

将其更改为:

^{pr2}$

现在一切都很顺利。在

谢谢你的评论

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

你可以试试wx.EVT_KILL_焦点看看这是否有效,因为理论上,当你点击菜单时,它应该启动。或者你可以在wxPython官方论坛上问:http://groups.google.com/group/wxpython-users/topics


迈克·德里斯科尔

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

相关问题 更多 >