【发布时间】:2009-05-09 09:36:01
【问题描述】:
如何在 wxPython/wxWidgets 中将菜单项添加到框架的系统菜单中?
(我说的是在 Windows 中单击应用程序图标时出现的菜单 - 具有最小化、最大化、关闭...的菜单。
我想为一个不需要完整顶部菜单的简单应用程序添加我自己的菜单项。
如果存在一个仅限 Windows 的解决方案(并且足够简单),也会很有用。
【问题讨论】:
标签: windows wxpython wxwidgets
如何在 wxPython/wxWidgets 中将菜单项添加到框架的系统菜单中?
(我说的是在 Windows 中单击应用程序图标时出现的菜单 - 具有最小化、最大化、关闭...的菜单。
我想为一个不需要完整顶部菜单的简单应用程序添加我自己的菜单项。
如果存在一个仅限 Windows 的解决方案(并且足够简单),也会很有用。
【问题讨论】:
标签: windows wxpython wxwidgets
我不认为 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 上有用的东西。当我打开 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()
【讨论】: