我有一个使用XRC定义的菜单,像这样:
<object class="wxMenuItem" name="MenuItem_ShowTooltips">
<label>Show tooltips</label>
<checkable>1</checkable>
</object>
我在应用程序的父框架中对它进行了初始化,像这样
self.frame = self.res.LoadFrame(None, 'MainFrame')
当我的应用程序启动时,我检查用户偏好文件以获得初始值(在这种情况下是布尔值),并希望根据该参数检查或取消选中MenuItem。对于普通的wx控件,我可以使用像
这样的内容 self.MenuItem_ShowTooltips.Check(self.UserPreferences['ShowTooltips'])
如何获得XRC创建的MenuItem_ShowTooltips控件的处理?
嗯,经过几天的摸索,我找到了答案。如果它对其他人有所帮助,或者如果我忘记并最终回到StackOverflow上再次找到答案,这里是。
要获得菜单项的处理,您必须使用wx窗口的GetMenuBar()
方法。
self.MenuItem_ShowTooltips = self.TopWindow.GetMenuBar().FindItemById(xrc.XRCID('MenuItem_ShowTooltips'))
一旦你有了句柄你就可以像这样设置它的检查状态
self.MenuItem_ShowTooltips.Check(self.UserPreferences['ShowTooltips'])
你将它绑定到像这样的事件
self.frame.Bind(wx.EVT_MENU, self.SaveUserPrefs, id=xrc.XRCID('MenuItem_ShowTooltips'))
这帮助我解决了我的问题-谢谢,虽然我发现我也绑定到菜单首先按照下面的例子:
self.frameMain.Bind(wx.EVT_MENU, self.event_thatdoes_stuff, id=xrc.XRCID('name_from_xrc'))
self.mymenu_handler = self.frameMain.GetMenuBar().FindItemById(xrc.XRCID('name_from_xrc'))
如果没有上面示例中的第一行,python将不接受下面的行。我想添加这条评论的原因和你完全一样——如果我最终再次寻找答案,它可能会对其他人有所帮助。
再一次,你的信息真的帮助了我,我很感激你留下你的答案!