如何以编程方式设置 Python XRC MenuItem 的选中状态?

How do I programmatically set the checked state of an Python XRC MenuItem?

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

好吧,经过几天的摆弄,我找到了答案。如果它对其他人有帮助,或者如果我忘记并最终回到 Whosebug 再次找到答案,就在这里。

要获得菜单项的句柄,您必须使用 wx window.

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 将不会接受下面的行。我想添加此评论的原因与您所做的完全相同 - 如果我最终再次寻找答案可能会对其他人有所帮助。
再一次,您的信息真的帮了我大忙,非常感谢您留下您的答案!