Как программно установить проверенное состояние 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?
2 ответа
Ну, после пары дней возни я нашел свой ответ. В случае, если это поможет кому-то еще, или если я забуду и снова окажусь в Stackru, чтобы найти ответ снова, вот оно.
Чтобы получить доступ к пункту меню, вы должны использовать GetMenuBar()
метод окна wx.
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 не принял бы строку ниже. Я хотел добавить этот комментарий по той же причине, что и вы, - в случае, если это может помочь кому-то еще, если я в конечном итоге снова буду искать ответ.
Еще раз, ваша информация действительно помогла мне, и я ценю, что вы оставили свой ответ!