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

wxPython:如何使两个工具栏使用一个状态栏作为工具提示?,wxpython,wxwidgets,Wxpython,Wxwidgets,我有一个界面,有两个工具栏,一个附在框架上,另一个嵌入笔记本选项卡中。框架中的一个在状态栏中尽职尽责地显示longHelp字符串,另一个在笔记本选项卡中 没有。如何告诉笔记本选项卡上的一个显示其帮助的位置,或者我必须自己管理输入和输出绑定?来自wxPython docs """ 长帮助字符串 当鼠标指针位于工具内部时,此字符串将显示在父帧的状态栏(如果有)中 “”“ 所以笔记本中的工具栏并没有任何状态栏来显示长时间的帮助,所以无论是通过src,我们都应该研究它如何查询abt状态栏,并向主框架状态

我有一个界面,有两个工具栏,一个附在框架上,另一个嵌入笔记本选项卡中。框架中的一个在状态栏中尽职尽责地显示longHelp字符串,另一个在笔记本选项卡中 没有。如何告诉笔记本选项卡上的一个显示其帮助的位置,或者我必须自己管理输入和输出绑定?

来自wxPython docs """ 长帮助字符串 当鼠标指针位于工具内部时,此字符串将显示在父帧的状态栏(如果有)中 “”“

所以笔记本中的工具栏并没有任何状态栏来显示长时间的帮助,所以无论是通过src,我们都应该研究它如何查询abt状态栏,并向主框架状态栏提供一个参考

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

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

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

虽然这篇文章已经很老了,但我自己也遇到了同样的问题。使用wxpythonphoenix 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)
有关EVT_工具输入的简短说明,请参见