Wxpython wx.html.htmlwindow를 사용자가 링크를 클릭했을 때의 위치로 다시 스크롤하려면 어떻게해야합니까?

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

  •  05-07-2019
  •  | 
  •  

문제

인터페이스의 일부를 표시하기 위해 wxpython wx.html.htmlwindow를 사용하고 있습니다. 사용자는 목록보다 작은 창의 링크 목록을 아래로 스크롤 할 수 있습니다. 링크를 클릭하면 웹 페이지를 다시 칠해야하지만 페이지 위치를 클릭 한 위치로 되돌려보고 싶습니다.

이벤트에서 Mouseevent.getLogicalPosition ()을 시도했지만 DC를 원하고 내가 할 수있는 최선은 GetPosition ()과 동일한 정보를 얻는 것입니다.

나는 또한 htmlwindow.calcscrolledposition ()을 시도했지만 Htmlwindow에서는 사용할 수없는 것 같습니다.

내가 원하는 것은 Mouseevent 또는 OnlinkClicked 정보에서 파생 될 수있는 두루마리 위치입니다.

나는 htmlwindow.scrolltoanchor ()에 대해 알고 있지만 플라우기가 좋고 드물다 - 가능하면 그것을 우회하여 뒤로 스크롤 할 수 있도록 우회하는 것을 선호합니다. 바로 그거죠 사용자가 클릭 한 곳으로.

감사!

도움이 되었습니까?

해결책

그것을 보는 것은 어떻습니까 wxhtmlwindow의 출처 영감을 얻으려면? 예를 들어 wxHtmlWindow::LoadPage(): 그것

// store[s the current] scroll position into history item:
int x, y;
GetViewStart(&x, &y);
(*m_History)[m_HistoryPos].SetPos(y);

이 저장된 스크롤 위치가 사용됩니다 wxHtmlWindow::HistoryBack():

Scroll(0, (*m_History)[m_HistoryPos].GetPos());
Refresh();

저장된 위치로 돌아갑니다.

나는이 내장 된 "Window-in-Window"핸들링이 가장 "플라크가 많고 절충되지 않은"것이 아니라고 가정합니다. 비슷한 일이 당신을 위해 일할 수 있습니까?

다른 팁

어쩌면 조금 늦었지만 도끼의 팁과 일부 힌트가 있습니다. 여기, 나는 그 전화를 생각합니다 :

scrollpos = wx.html.HtmlWindow.GetViewStart()[1]

그리고 그것을 저장 한 다음 나중에 다음에 전화를 걸었습니다.

wx.html.HtmlWindow.Scroll(0, scrollpos)

나를 위해 일합니다. 물론 Wx.html.htmlwindow를 인스턴스에 대한 실제 참조로 변경해야합니다.

다음은 페이지를 이전 위치로 스크롤하기 위해하고있는 일입니다. 나는 깜박임을 피하기 위해 이것을한다.

        pos = self.GetViewStart()[1]
        self.Freeze()
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
        self.Thaw()

일반적으로 클릭 이벤트는 마우스 업 이벤트에 의해 트리거됩니다. Mousedown 이벤트를 캡처하여 마우스 위치를 추적하면 마지막 클릭 (마우스 업)이 어디에서 발생했는지 알 수 있으며,이를 통해 물건을 재구성 할 수 있습니다.

이 특별한 문제의 경우 WXHTMLWindow 컨트롤 내에 있는지 확인하는 것과 같이 Mousedown에서 좀 더 많은 작업을 수행해야 할 수도 있습니다. 그렇다면 라인 번호와 같은 것을 저장해야합니다.

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