Python 当显示为弹出窗口时,wx菜单将从帧中消失

Python 当显示为弹出窗口时,wx菜单将从帧中消失,python,wxpython,menu,Python,Wxpython,Menu,我正在尝试创建一个wx.菜单,它将在弹出窗口(右键单击时调用)和可从框架菜单栏访问的子菜单之间共享。下面的代码演示了这个问题 如果从菜单栏打开“菜单>子菜单”,则“asdf”项可见。如果右键单击框架内容区域,“asdf”也将从那里可见。。。但是,返回菜单栏,您会发现“菜单>子菜单”是空的。为什么会发生这种情况?我如何修复它 import wx app = wx.PySimpleApp() m = wx.Menu() m.Append(-1, 'asdf') def show_popup(evt

我正在尝试创建一个wx.菜单,它将在弹出窗口(右键单击时调用)和可从框架菜单栏访问的子菜单之间共享。下面的代码演示了这个问题

如果从菜单栏打开“菜单>子菜单”,则“asdf”项可见。如果右键单击框架内容区域,“asdf”也将从那里可见。。。但是,返回菜单栏,您会发现“菜单>子菜单”是空的。为什么会发生这种情况?我如何修复它

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()
有趣的是,将菜单添加到菜单栏是可行的,但不是我想要的行为:

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()

我将创建一个函数,
create\u menu
,它创建并返回一个
wx.menu
对象。调用它一次,将其添加到菜单栏,并在
show\u popup
中调用它。所以您使用的是单独的菜单对象。不要担心在每次右键单击时创建它们,这没什么大不了的。

我会创建一个函数,
create\u menu
,它创建并返回一个
wx.menu
对象。调用它一次,将其添加到菜单栏,并在
show\u popup
中调用它。所以您使用的是单独的菜单对象。不要担心在每次右键单击时创建它们,这不是什么大问题。

事实上,对我来说,它们是同一个对象更方便,因为菜单将包含多个需要保持相同状态的检查项,无论菜单以何种方式显示。我可以手动同步它们,但这会很讨厌。+1这是应该做的,@Adam Fraser,你不需要手动更新任何东西,只需要一个函数来创建菜单并钩住更新事件和其他事件,就是这样。实际上,对我来说,它们是同一个对象更方便,因为菜单将包含几个需要保持相同状态的检查项,而不管菜单以何种方式显示。我可以手动同步它们,但这会很讨厌。+1这是应该做的,@Adam Fraser,你不需要手动更新任何东西,只需要一个函数来创建菜单和挂钩更新事件和其他事件,就是这样。