wxPython:ツールチップに2つのツールバーで1つのステータスバーを使用する方法
質問
フレームにアタッチされたツールバーとノートブックタブに埋め込まれたツールバーの2つのツールバーがあるインターフェイスがあります。フレーム内の1つは、ステータスバーにlongHelp文字列を忠実に表示し、ノートブックタブには1つを表示します。 ではない。 [ノートブック]タブの1つにヘルプを表示する場所を指定するにはどうすればよいですか、または自分でバインドを管理する必要がありますか?
解決
wxWidgetsにあります:
void wxToolBarBase::OnMouseEnter(int id)
{
...
wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
if ( frame )
{
...
frame->DoGiveHelp(help, id != wxID_ANY);
}
...
}
C ++プログラムでは、この関数をオーバーライドできます(GetParent()をGetTopLevelParent()に変更するだけで機能します)。 Pythonでは、記述したとおり、enter / leaveイベントをバインドし、ハンドラーからDoGiveHelp()を呼び出すことしかできません。
他のヒント
この投稿はかなり古いものですが、私はこの同じ問題に自分でつまずいただけです。 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)
EVT_TOOL_ENTERの簡単な説明は、 wxPythonドキュメント。
wxPythonドキュメントから """ longHelpString この文字列は、マウスポインターがツール内にあるときに、親フレームのステータスバー(存在する場合)に表示されます。 """
ノートブックのツールバーは長いヘルプを表示するステータスバーを取得しないので、srcを介してabtステータスバーを照会する方法を反転し、メインフレームのステータスバーへの参照を提供する必要があります
それ以外の場合、wxToolBar :: OnMouseEnterをオーバーライドして、ステータスバーに直接ヘルプを表示する方が良いと思います