wxPython:ツールチップに2つのツールバーで1つのステータスバーを使用する方法

StackOverflow https://stackoverflow.com/questions/1014239

  •  06-07-2019
  •  | 
  •  

質問

フレームにアタッチされたツールバーとノートブックタブに埋め込まれたツールバーの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をオーバーライドして、ステータスバーに直接ヘルプを表示する方が良いと思います

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top