代码之家  ›  专栏  ›  技术社区  ›  Bryan Oakley

wxpython:如何使两个工具栏使用一个状态栏作为工具提示?

  •  2
  • Bryan Oakley  · 技术社区  · 15 年前

    我有一个界面,有两个工具栏,一个附在框架上,另一个嵌入在笔记本选项卡中。框架中的那个在状态栏中尽职地显示longhelp字符串,在笔记本选项卡中显示longhelp字符串。 没有。如何告诉“笔记本”选项卡上的用户在哪里显示其帮助,或者我必须自己管理输入和保留绑定?

    3 回复  |  直到 7 年前
        1
  •  0
  •   marcin    15 年前

    在wxwidgets中有:

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

    在C++程序中,可以重写这个函数(简单地改变GETPARTENTHER)到GETOPFLARPARTEN()应该工作。在python中,您只能像您所写的那样绑定enter/leave事件并从处理程序调用dogivehelp()。

        2
  •  2
  •   Vertganti    7 年前

    虽然这篇文章相当老旧,但我自己也遇到了同样的问题。使用wxpython phoenix 4.0.0A4,我发现的解决方案是使用工具栏的ID将函数绑定到evt_tool_enter事件。

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

    然后在您的_函数中,您可以从工具栏中获取工具,从工具中获取帮助文本,并将其写入状态栏。

    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)
    

    可在 wxPython docs .

        3
  •  0
  •   Anurag Uniyal    15 年前

    来自Wxpython文档 “” 长字符串 当鼠标指针位于工具内时,此字符串显示在父框架的状态栏(如果有)中。 “”

    所以,笔记本中的工具栏没有任何状态栏来显示长期帮助,所以无论是通过SRC,我们都应该反转它如何查询abt状态栏,并提供对主框架状态栏的引用。

    否则,我认为更好的方法是重写wxtoolbar::onMouseEnter并直接在状态栏上显示帮助。