我正在尝试创建一个wx.Menu,它将在弹出窗口(右键单击调用)和可从框架菜单栏访问的子菜单之间共享。以下代码演示了此问题。
如果从菜单栏打开“菜单>子菜单”,则可以看到“asdf”项。如果您右键单击框架内容区域,那么也可以从那里看到“asdf”...但是,返回菜单栏,您会发现“MENU>子菜单”是空的。为什么会发生这种情况?我该如何解决?
import wx
app = wx.PySimpleApp()
m = wx.Menu()
m.Append(-1, 'asdf')
def show_popup(evt):
''' R-click callback '''
f.PopupMenu(m, (evt.X, evt.Y))
f = wx.Frame(None)
f.SetMenuBar(wx.MenuBar())
frame_menu = wx.Menu()
f.MenuBar.Append(frame_menu, 'MENU')
frame_menu.AppendMenu(-1,'submenu', m)
f.Show()
f.Bind(wx.EVT_RIGHT_DOWN, show_popup)
app.MainLoop()
有趣的是,将菜单附加到MenuBar有效,但不是我想要的行为:
import wx
app = wx.PySimpleApp()
m = wx.Menu()
m.Append(-1, 'asdf')
def show_popup(evt):
f.PopupMenu(m, (evt.X, evt.Y))
f = wx.Frame(None)
f.SetMenuBar(wx.MenuBar())
f.MenuBar.Append(m, 'MENU')
f.Show()
f.Bind(wx.EVT_RIGHT_DOWN, show_popup)
app.MainLoop()
答案 0 :(得分:1)
我会创建一个函数create_menu
,它创建并返回一个wx.Menu
对象。调用一次将其添加到菜单栏并在show_popup
中调用它。所以你正在使用单独的Menu对象。不要担心每次右击都会创建它们,这不是什么大问题。