我正在使用wxPython wx.html.HtmlWindow来显示我的界面的一部分。用户可以向下滚动小于列表的窗口中的链接列表。当他们点击链接时,我需要重新绘制网页,但我想将页面位置返回到他们点击它的位置。
我在事件上尝试了MouseEvent.GetLogicalPosition(),但是它想要一个DC,我能做的最好的就是得到与GetPosition()相同的信息,所以我一定不能把它当作正确的之一。
我也试过HtmlWindow.CalcScrolledPosition(),但显然在HtmlWindow中没有,因为我得到了一个NotImplementedError ......
我想要的是可以从MouseEvent或OnLinkClicked信息派生的滚动位置。
我知道HtmlWindow.ScrollToAnchor(),但它是片状和不美观的 - 如果可能的话我宁愿绕过它,这样我就可以将完全滚回到用户点击的位置。
谢谢!
答案 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控件内,如果是,则保存类似行号的内容。