如何以编程方式设置Python XRC MenuItem的已检查状态?

时间:2016-09-24 04:15:49

标签: python menuitem xrc

我有一个使用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控件?

2 个答案:

答案 0 :(得分:0)

好吧,经过几天的摆弄,我找到了答案。万一它可以帮助其他人,或者万一我忘了并最终回到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'))

答案 1 :(得分:0)

这帮助我解决了我的问题 - 谢谢,虽然我发现我也按照下面的示例首先绑定了菜单:

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将不接受下面的行。我想添加这个评论的原因与你做的完全相同 - 如果我最后再回来寻找答案,可能会帮助其他人。
再次,您的信息真的帮助了我,我感谢您留下您的答案!