wxPython: come fare in modo che due barre degli strumenti utilizzino una barra di stato per i suggerimenti?

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

  •  06-07-2019
  •  | 
  •  

Domanda

Ho un'interfaccia che ha due barre degli strumenti, una collegata al frame e una incorporata in una scheda del notebook. Quello nel riquadro mostra rispettosamente le stringhe longHelp nella barra di stato, quello nella scheda del blocco note non. Come faccio a dire a quello sulla scheda del taccuino dove visualizzare il suo aiuto, o devo gestire da solo i tasti di invio e di uscita?

È stato utile?

Soluzione

Hai in wxWidgets:

void wxToolBarBase::OnMouseEnter(int id)
{
    ...
    wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
    if ( frame )
    {
        ...
        frame->DoGiveHelp(help, id != wxID_ANY);
    }
    ...
}

Nel programma C ++ puoi sovrascrivere questa funzione (semplicemente cambiando GetParent () in GetTopLevelParent () dovrebbe funzionare). In Python puoi solo, come hai scritto, associare gli eventi di invio / uscita e chiamare DoGiveHelp () dai gestori.

Altri suggerimenti

Sebbene questo post sia piuttosto vecchio, mi sono appena imbattuto in questo stesso problema. Usando wxPython Phoenix 4.0.0a4, la soluzione che ho trovato è stata quella di associare una funzione all'evento EVT_TOOL_ENTER usando l'id della barra degli strumenti.

your_frame.Bind(wx.EVT_TOOL_ENTER, your_function, id=toolbar_id)

Quindi nella tua funzione puoi ottenere lo strumento dalla barra degli strumenti, il testo della guida dallo strumento e scriverlo nella barra di stato.

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)

Una breve descrizione di EVT_TOOL_ENTER è disponibile in wxPython docs .

dai documenti di wxPython & Quot; " " longHelpString Questa stringa viene mostrata nella barra di stato (se presente) del frame principale quando il puntatore del mouse si trova all'interno dello strumento & Quot; " "

quindi la barra degli strumenti di Notebook non ottiene alcuna barra di stato per visualizzare un lungo aiuto, quindi sia attraverso src che dovremmo invertire il modo in cui si informa sulla barra di stato e fornire un riferimento alla barra di stato del frame principale

altrimenti penso che il modo migliore sia semplicemente quello di sostituire wxToolBar :: OnMouseEnter e visualizzare la guida direttamente sulla barra di stato

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top