如何将wxPython wx.html.HtmlWindow滚动回到用户单击链接时的位置?

时间:2009-09-09 14:45:58

标签: python wxpython

我正在使用wxPython wx.html.HtmlWindow来显示我的界面的一部分。用户可以向下滚动小于列表的窗口中的链接列表。当他们点击链接时,我需要重新绘制网页,但我想将页面位置返回到他们点击它的位置。

我在事件上尝试了MouseEvent.GetLogicalPosition(),但是它想要一个DC,我能做的最好的就是得到与GetPosition()相同的信息,所以我一定不能把它当作正确的之一。

我也试过HtmlWindow.CalcScrolledPosition(),但显然在HtmlWindow中没有,因为我得到了一个N​​otImplementedError ......

我想要的是可以从MouseEvent或OnLinkClicked信息派生的滚动位置。

我知道HtmlWindow.ScrollToAnchor(),但它是片状和不美观的 - 如果可能的话我宁愿绕过它,这样我就可以将完全滚回到用户点击的位置。

谢谢!

4 个答案:

答案 0 :(得分:2)

如何看一下source of 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();

返回保存的位置。

我认为这种内置的“走到最后位置的窗口”处理并不是最“片面和不美观”的。也可以为你做类似的工作吗?

答案 1 :(得分:1)

也许有点晚了,但是有一些来自ax的提示,以及来自here的一些提示,我认为这是在呼唤:

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

并存储,然后稍后调用:

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

适合我。当然,您需要将wx.html.HtmlWindow更改为对实例的实际引用。

答案 2 :(得分:1)

以下是我将页面滚动到上一个位置的操作。 我这样做是为了避免眨眼。

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

答案 3 :(得分:0)

通常,ClickU事件由MouseUp事件触发。如果通过捕获任何MouseDown事件来跟踪鼠标位置,您将知道最后一次单击(MouseUp)发生的位置,这应该允许您重建事物。

对于这个特殊问题,您可能需要在MouseDown中做更多工作,例如检查它们是否在wxHtmlWindow控件内,如果是,则保存类似行号的内容。