【问题标题】:Adding system menu items in wxPython/wxWidgets在 wxPython/wxWidgets 中添加系统菜单项
【发布时间】:2009-05-09 09:36:01
【问题描述】:

如何在 wxPython/wxWidgets 中将菜单项添加到框架的系统菜单中?
(我说的是在 Windows 中单击应用程序图标时出现的菜单 - 具有最小化、最大化、关闭...的菜单。

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

如果存在一个仅限 Windows 的解决方案(并且足够简单),也会很有用。

【问题讨论】:

    标签: windows wxpython wxwidgets


    【解决方案1】:

    我不认为 wxWidgets/wxPython 允许您操作系统菜单,除了一些不足以满足您的需求的例外情况:

    • 您可以通过将样式标志传递给 wx.Frame 来移除系统菜单:style=wx.DEFAULT_FRAME_STYLE & ~wx.SYSTEM_MENU

    • 在 Mac OS X 上,ID 为 wx.ID_EXITwx.ID_HELP 的菜单项将移至应用程序菜单中。

    我尝试绑定wx.EVT_MENU_OPEN 事件,虽然调用了事件处理程序,但传递的事件不包含任何在Windows 上有用的东西。当我打开 Frame 的系统菜单时,下面的代码会打印“None 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()
    

    【讨论】:

    • 您可能想在 Mac OS X 上更改您的答案 - 它没有 Windows 那样的系统菜单。帮助和退出菜单项移动到应用程序菜单,这是不同的。最接近系统菜单的是停靠图标上显示的菜单,并且应该通过 wxTaskBarIcon 访问它。
    • 猜猜我们将不得不面对这不可能...谢谢。
    • @Hexagon:这不是不可能,而是困难和丑陋。我可以给你代码如何将菜单项添加到 Windows 系统菜单,我可以给你一个关于如何捕获菜单命令并处理它们的指针(对于 wxPython),但我不知道 Python,所以我不能发布您问题的真实答案。
    猜你喜欢
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    相关资源
    最近更新 更多