如何在链接点击后保留wx.html.HtmlWindow中的页面位置?

时间:2011-03-23 13:26:13

标签: python wxwidgets wxhtmlwindow

我有一个带wx.html.HtmlWindow窗口的wx python应用程序:

class MyHtmlWindow(wx.html.HtmlWindow):

方法SetPage用于更新窗口上的html内容:

def OpenURL(self, url, save_scroll_pos=True):
    def callback(src, url, save_scroll_pos):
        pos = self.GetViewStart()[1]
        self.SetPage(src)
        if save_scroll_pos:
            self.Scroll(0, pos)
    def errback(err): 
        self.SetPage('<html>Failed:<br>%s</html>' % err.getErrorMessage())

    d = self.DownloadURL(url)
    d.addCallback(callback, url, save_scroll_pos)
    d.addErrback(errback)

我想在打开后保存页面的当前滚动位置,此代码正常工作。只有一个问题,这对我来说是个大问题:它是两次渲染html页面。 首先是self.SetPage,然后是self.Scroll。

所以每次我打电话给self.OpenURL我看到页面闪烁。它滚动到顶部,然后向右滚动到所需的位置。

我试图通过处理EVT_PAINT来修复它:

    self.Bind(wx.EVT_PAINT, self.OnPaintEvt)        

但是self.OnPaintEvt在 self.Scroll之后调用 - 所以这种方式不适合我。

任何想法?

1 个答案:

答案 0 :(得分:0)

非常感谢前开发者。它们提供了非常有用的方法:冻结和解冻。 这是非常简单的解决方案:

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

    def errback(err): 
        self.SetPage('<html>Failed:<br>%s</html>' % err.getErrorMessage())

    d = self.DownloadURL(url)
    d.addCallback(callback, url, save_scroll_pos)
    d.addErrback(errback)

根本没有闪烁! : - )