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

如何将wxPython wx.html.HtmlWindow向下滚动到用户单击链接时的位置?,python,wxpython,Python,Wxpython,我正在使用wxPython wx.html.HtmlWindow来显示我的部分界面。用户可以在小于列表的窗口中向下滚动链接列表。当他们单击链接时,我需要重新绘制网页,但我想将页面位置返回到他们单击的位置 我在事件上尝试了MouseEvent.GetLogicalPosition(),但它需要一个DC,我所能做的就是获得与GetPosition()相同的信息,所以我一定没有提供正确的信息 我还尝试了HtmlWindow.calcscrolled position(),但显然这在HtmlWindow

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

我在事件上尝试了MouseEvent.GetLogicalPosition(),但它需要一个DC,我所能做的就是获得与GetPosition()相同的信息,所以我一定没有提供正确的信息

我还尝试了HtmlWindow.calcscrolled position(),但显然这在HtmlWindow中不可用,因为我得到了一个NotImplementedError

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

我知道HtmlWindow.ScrollToAnchor(),但它是脆弱和不美观的——如果可能的话,我宁愿绕过它,这样我就可以准确地滚动到用户单击的位置


谢谢

看一看这本书如何获得灵感?例如:it

此保存的滚动位置用于:

返回到保存的位置


我认为这种内置的“转到窗口中的最后一个位置”处理并不是最“脆弱和不美观的”。类似的东西也能为您工作吗?

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


对于这个特殊的问题,您可能需要在MouseDown中做更多的工作,比如检查它们是否在wxHtmlWindow控件内,如果在wxHtmlWindow控件内,然后保存一些东西,例如行号。

可能有点晚,但是有一些ax的提示和来自的提示,我认为调用:

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()

您不能使用wxHtmlWindow::HistoryBack(),它可以回滚到用户单击的位置吗?这不合适--页面内容已更改,我只想将其显示在相同的滚动位置。考虑一下如何在HTML中实现类似树控件的功能——单击一个链接以打开有关它的更多信息,但您不希望每次这样做时页面都跳回顶部。谢谢我最终使用了一种变体。非常感谢!
wx.html.HtmlWindow.Scroll(0, scrollpos)
        pos = self.GetViewStart()[1]
        self.Freeze()
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
        self.Thaw()