wxPython: como fazer duas barras de ferramentas usar uma barra de status para dicas de ferramentas?
Pergunta
Eu tenho uma interface que tem duas barras de ferramentas, um ligado à estrutura e um incorporado em um guia notebook. A uma na moldura lealmente mostras longHelp cordas na barra de estado, a um separador no caderno não. Como posso saber o que está no guia notebook onde exibir sua ajuda, ou eu tenho de gerir entrar e ligações Deixe-me?
Solução
Você tem em wxWidgets:
void wxToolBarBase::OnMouseEnter(int id)
{
...
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame )
{
...
frame->DoGiveHelp(help, id != wxID_ANY);
}
...
}
Programa Em C ++ você pode substituir essa função (simplesmente mudando GetParent () para GetTopLevelParent () deve funcionar). Em Python você só pode, como você escreveu, se ligam inserir eventos / sair e chamar DoGiveHelp () de manipuladores.
Outras dicas
Embora este post é bastante antigo, eu só tropeçou em este mesmo problema sozinho. Usando wxPython Phoenix 4.0.0a4, a solução que eu encontrei foi a de ligar uma função para o evento EVT_TOOL_ENTER usando id da barra de ferramentas.
your_frame.Bind(wx.EVT_TOOL_ENTER, your_function, id=toolbar_id)
Então, em your_function você pode obter a ferramenta da barra de ferramentas, o texto de ajuda da ferramenta e escrever que na barra de status.
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)
Uma breve descrição do EVT_TOOL_ENTER pode ser encontrada no docs wxPython .
a partir de docs wxPython """ longHelpString Esta cadeia é mostrado na barra de estado (caso exista) da armação principal quando o cursor do rato é no interior da ferramenta "" "
para barra de ferramentas no notebook não recebe qualquer barra de status para exibir longa ajuda, por isso, quer através src devemos invertigate como ele indaga abt barra de status e fornecer uma ref a barra de status quadro principal
else eu acho que a melhor maneira é apenas para substituir wxToolBar :: OnMouseEnter e exibição de ajuda diretamente na barra de status