代码之家  ›  专栏  ›  技术社区  ›  Hexagon

在wxpython/wxwidgets中添加系统菜单项

  •  0
  • Hexagon  · 技术社区  · 15 年前

    如何在wxpython/wxwidgets中向框架的系统菜单添加菜单项?
    (我说的是在Windows中单击应用程序图标时出现的菜单,即最小化、最大化、关闭…)。

    我想为一个简单的应用程序添加一个我自己的菜单项,它不需要一个完整的顶部菜单。

    如果一个只支持Windows的解决方案存在(并且足够简单),那么它也会很有用。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Frank Niessink    15 年前

    我认为wxwidgets/wxpython不允许您操作系统菜单,但有一些例外情况不足以满足您的需要:

    • 通过将样式标志传递到wx.frame,可以删除系统菜单: style=wx.DEFAULT_FRAME_STYLE & ~wx.SYSTEM_MENU

    • 在Mac OS X上,带有ID的菜单项,如 wx.ID_EXIT wx.ID_HELP 移动到应用程序菜单中。

    我试着把 wx.EVT_MENU_OPEN 事件,尽管调用了事件处理程序,但传递的事件不包含任何在Windows上有用的内容。当我打开框架的系统菜单时,下面的代码将打印“无0”:

    import wx
    
    class Frame(wx.Frame):
        def __init__(self, *args, **kwargs):
            super(Frame, self).__init__(*args, **kwargs)
            self.Bind(wx.EVT_MENU_OPEN, self.onMenuOpen)
    
        def onMenuOpen(self, event):
            print event.GetMenu(), event.GetMenuId()
            event.Skip()
    
    
    app = wx.App(0)
    frame = Frame(None)
    frame.Show()
    app.MainLoop()