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