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

时间:2009-06-18 17:57:24

标签: wxpython wxwidgets

我有一个界面,有两个工具栏,一个连接到框架,一个嵌入笔记本选项卡。框架中的一个在状态栏中尽职尽责地显示了longHelp字符串,即笔记本选项卡中的字符串 才不是。如何告诉笔记本选项卡上显示帮助的位置,或者我是否必须自己管理输入和离开绑定?

3 个答案:

答案 0 :(得分:2)

虽然这篇文章相当陈旧,但我自己也偶然发现了同样的问题。使用wxPython Phoenix 4.0.0a4,我发现的解决方案是使用工具栏的id将函数绑定到EVT_TOOL_ENTER事件。

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

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

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中找到EVT_TOOL_ENTER的简短说明。

答案 1 :(得分:0)

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

所以笔记本中的工具栏没有得到任何状态栏来显示长帮助,所以要么通过src我们应该反转它如何查询abt状态栏并提供参考主框架状态栏

否则我认为更好的方法是覆盖wxToolBar :: OnMouseEnter并直接在状态栏上显示帮助

答案 2 :(得分:0)

你有wxWidgets:

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

在C ++程序中,您可以覆盖此函数(只需将GetParent()改为GetPopLevelParent()就可以了。在Python中,您只能在编写时绑定进入/离开事件并从处理程序调用DoGiveHelp()。