我有一个应用程序允许某些控制器更改主菜单栏的布局。我通过将主菜单栏传递给控制器来做到这一点,然后控制器向它添加一些菜单。我的问题是将菜单点击事件绑定到那些添加的菜单。理论上很容易:
def bind_main_menu_bar(self, main_menu_bar):
self.main_menu_bar = main_menu_bar
edit_menu = shared.create_menu([
(const.ID_UNDO, self.LABEL_UNDO_EMPTY),
(const.ID_REDO, self.LABEL_REDO_EMPTY),
(),
(const.ID_VALIDATE_ADDRESSES, 'Validate selected addresses'),
(const.ID_VALIDATE_ALL_ADDRESSES, 'Validate all addresses'),
])
edit_menu.Bind(wx.EVT_MENU, self.on_menu)
edit_menu.Bind(wx.EVT_UPDATE_UI, self.on_menu_update)
main_menu_bar.Insert(1, edit_menu, 'Edit')
这在 OSX 中非常有效,但在 Windows 中,只有在wx.EVT_MENU
将事件直接绑定到edit_menu
菜单时才有效。换句话说,wx.EVT_UPDATE_UI
永远不会触发事件处理程序。我也尝试过 binding EVT_MENU_OPEN
,EVT_MENU_CLOSE
但EVT_MENU_HIGHLIGHT
它们都不起作用。当我将它们绑定到顶级框架时,它们都可以工作,但是没有办法将事件处理程序限制为仅edit_menu
菜单。
这是一个错误,还是我忽略了什么?另外,任何人都可以找到解决我的问题的方法吗?
我在 Window 8 上使用 wxPython 2.9 (dev)。