wxPython: ¿cómo hacer que dos barras de herramientas usen una barra de estado para información sobre herramientas?
Pregunta
Tengo una interfaz que tiene dos barras de herramientas, una adjunta al marco y otra incrustada en una pestaña del cuaderno. El que está en el marco muestra obedientemente cadenas largas de Ayuda en la barra de estado, el que está en la pestaña del cuaderno no. ¿Cómo le digo al que está en la pestaña del cuaderno dónde mostrar su ayuda, o tengo que administrar ingresar y dejar los enlaces yo mismo?
Solución
Tienes en wxWidgets:
void wxToolBarBase::OnMouseEnter(int id)
{
...
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame )
{
...
frame->DoGiveHelp(help, id != wxID_ANY);
}
...
}
En el programa C ++ puede anular esta función (simplemente cambiar GetParent () a GetTopLevelParent () debería funcionar). En Python solo puede, como escribió, vincular eventos de entrada / salida y llamar a DoGiveHelp () desde los controladores.
Otros consejos
Aunque esta publicación es bastante antigua, me encontré con este mismo problema. Usando wxPython Phoenix 4.0.0a4, la solución que encontré fue vincular una función al evento EVT_TOOL_ENTER usando la identificación de la barra de herramientas.
your_frame.Bind(wx.EVT_TOOL_ENTER, your_function, id=toolbar_id)
Luego, en your_function puede obtener la herramienta de la barra de herramientas, el texto de ayuda de la herramienta y escribirla en la barra de estado.
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)
Se puede encontrar una breve descripción de EVT_TOOL_ENTER en documentos wxPython .
de wxPython docs " " " longHelpString Esta cadena se muestra en la barra de estado (si la hay) del marco principal cuando el puntero del mouse está dentro de la herramienta " " "
para que la barra de herramientas en el cuaderno no obtenga ninguna barra de estado para mostrar una ayuda larga, por lo que a través de src deberíamos investigar cómo consulta la barra de estado abt y proporcionar una referencia a la barra de estado del marco principal
de lo contrario, creo que la mejor manera es anular wxToolBar :: OnMouseEnter y mostrar la ayuda directamente en la barra de estado