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

Другие вопросы по тегам