wxPython: ¿cómo hacer que dos barras de herramientas usen una barra de estado para información sobre herramientas?

StackOverflow https://stackoverflow.com/questions/1014239

  •  06-07-2019
  •  | 
  •  

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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top