wxPython: comment faire en sorte que deux barres d'outils utilisent une barre d'état pour les info-bulles?

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai une interface qui a deux barres d'outils, l'une attachée au cadre et l'autre incorporée dans un onglet de bloc-notes. Celui du cadre affiche consciencieusement les chaînes longHelp dans la barre d'état, celui de l'onglet du bloc-notes. ne fait pas. Comment puis-je indiquer à l'onglet de l'ordinateur portable où afficher son aide ou dois-je gérer moi-même les entrées et les sorties?

Était-ce utile?

La solution

Vous avez dans wxWidgets:

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

Dans le programme C ++, vous pouvez remplacer cette fonction (il suffit de changer GetParent () pour GetTopLevelParent () devrait fonctionner). En Python, vous pouvez uniquement, comme vous l'avez écrit, lier des événements d'entrée / sortie et appeler DoGiveHelp () à partir de gestionnaires.

Autres conseils

Bien que ce message soit relativement ancien, je suis moi-même tombé sur le même problème. En utilisant wxPython Phoenix 4.0.0a4, la solution que j'ai trouvée consistait à lier une fonction à l'événement EVT_TOOL_ENTER à l'aide de l'ID de la barre d'outils.

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

Ensuite, dans votre_fonction, vous pouvez obtenir l’outil de la barre d’outils, le texte d’aide de cet outil et l’écrire dans la barre d’état.

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)

Une brève description de EVT_TOOL_ENTER est disponible dans Docs wxPython .

à partir de la documentation wxPython " " longHelpString Cette chaîne est affichée dans la barre d'état (le cas échéant) du cadre parent lorsque le pointeur de la souris est à l'intérieur de l'outil. """

pour que la barre d’outils dans le bloc-notes n’affiche aucune aide importante dans la barre d’état, nous devons donc inverser la façon dont elle interroge la barre d’état et fournir une référence à la barre d’état du cadre principal

sinon, je pense que le meilleur moyen est de simplement remplacer wxToolBar :: OnMouseEnter et d'afficher l'aide directement sur la barre d'état

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top