【问题标题】:How to preserve page position in the wx.html.HtmlWindow after link clicked?单击链接后如何在 wx.html.HtmlWindow 中保留页面位置?
【发布时间】:2011-03-23 13:26:12
【问题描述】:

我有一个带有 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 之后调用 - 所以这种方式不适合我。

有什么想法吗?

【问题讨论】:

    标签: python wxwidgets wxhtmlwindow


    【解决方案1】:

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

    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)
    

    根本不眨眼! :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2013-02-14
      • 1970-01-01
      • 2016-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多