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