wxPython: как заставить две панели инструментов использовать одну строку состояния для всплывающих подсказок?
Вопрос
У меня есть интерфейс с двумя панелями инструментов, одна из которых прикреплена к рамке, а другая - во вкладке блокнота. Один в рамке покорно показывает строки longHelp в строке состояния, один во вкладке ноутбука не. Как указать пользователю на вкладке «Записная книжка», где должна отображаться его помощь, или я должен сам управлять входом и выходом из привязок?
Решение
У вас есть в wxWidgets:
void wxToolBarBase::OnMouseEnter(int id)
{
...
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame )
{
...
frame->DoGiveHelp(help, id != wxID_ANY);
}
...
}
В программе на C ++ вы можете переопределить эту функцию (простое изменение GetParent () на GetTopLevelParent () должно работать). В Python вы можете, как вы писали, только связывать события ввода / вывода и вызывать DoGiveHelp () из обработчиков.
Другие советы
Хотя этот пост довольно старый, я сам наткнулся на эту же проблему. Используя wxPython Phoenix 4.0.0a4, я нашел решение связать функцию с событием EVT_TOOL_ENTER, используя идентификатор панели инструментов.
your_frame.Bind(wx.EVT_TOOL_ENTER, your_function, id=toolbar_id)
Затем в вашей функции вы можете получить инструмент из панели инструментов, текст справки из инструмента и записать его в строку состояния.
def your_function(e):
tool_id = e.GetSelection()
if tool_id != -1:
# if the mouse is over a toolbar item
event_object = e.GetEventObject()
tool = event_object.FindById(tool_id)
text = tool.GetLongHelp()
else:
# if the mouse is in the toolbar area, but not on an item
text = some_default_text
your_frame.GetStatusBar().SetStatusText(text)
Краткое описание EVT_TOOL_ENTER можно найти в документы wxPython .
из документов wxPython & Quot; & Quot; & Quot; longHelpString Эта строка отображается в строке состояния (если есть) родительского фрейма, когда указатель мыши находится внутри инструмента. & Quot; & Quot; & Quot; р>
поэтому на панели инструментов в блокноте нет строки состояния для отображения длинной справки, поэтому либо через src мы должны исследовать, как она запрашивает строку состояния abt, и предоставлять ссылку на строку состояния основного кадра
иначе я думаю, что лучше всего переопределить wxToolBar :: OnMouseEnter и отобразить справку прямо в строке состояния