WXPYTHON : 두 개의 툴바가 툴팁에 하나의 상태 바를 사용하는 방법은 무엇입니까?

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

  •  06-07-2019
  •  | 
  •  

문제

두 개의 도구 모음이있는 인터페이스가 있으며, 하나는 프레임에 연결되어 있고 하나는 노트북 탭에 내장되어 있습니다. 프레임에있는 것은 상태 바에서 Longhelp 문자열을 정중하게 보여줍니다. 노트북 탭의 하나는 그렇지 않습니다. 노트북 탭에서 도움을 표시 할 위치를 어떻게 알리거나, Enter 및 Bindings를 직접 관리해야합니까?

도움이 되었습니까?

해결책

당신은 wxwidgets에 있습니다 :

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

C ++ 프로그램에서는이 기능을 무시할 수 있습니다 (간단히 getParent ()를 GetToplePelparent ()로 변경하면 작동 함). 파이썬에서는 쓴대로 이벤트를 입력/휴가를 바인드하고 핸들러에서 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 DOCS "" ""LONGHELPSTRING이 문자열은 마우스 포인터가 도구 안에있을 때 부모 프레임의 상태 바 (있는 경우)에 표시됩니다.

따라서 노트북의 도구 모음은 긴 도움을 줄 수있는 상태 막대를 얻지 못하므로 SRC를 통해 ABT 상태 표시 줄을 묻고 메인 프레임 상태 표시 줄에 참조를 제공하는 방법을 반대해야합니다.

그렇지 않으면 더 나은 방법은 wxtoolbar :: onmouseenter를 무시하고 상태 표시 줄에 직접 도움말을 표시하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top