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

时间:2010-03-24 02:29:05

标签: python wxpython menu

我正在尝试创建一个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()

1 个答案:

答案 0 :(得分:1)

我会创建一个函数create_menu,它创建并返回一个wx.Menu对象。调用一次将其添加到菜单栏并在show_popup中调用它。所以你正在使用单独的Menu对象。不要担心每次右击都会创建它们,这不是什么大问题。