0

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)

ページを開いた後に現在のスクロール位置を保存したいのですが、このコードは機能しています。1 つだけ問題があり、これは私にとって大きな問題です。html ページを 2 回レンダリングしています。最初は self.SetPage の後、2 番目は self.Scroll の後にあります。

したがって、self.OpenURL を呼び出すたびに、ページが点滅していることがわかります。必要な位置まで上と右にスクロールします。

EVT_PAINT を処理して修正しようとしていました。

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

しかし、self.OnPaintEvt は self.Scroll の後に呼び出しているため、この方法は私には向いていません。

何か案は?

4

1 に答える 1

0

Wx 開発者に感謝します。Freeze と Thaw という非常に便利なメソッドを提供します。これは非常に簡単な解決策です:

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)

まばたき一切なし!:-)

于 2011-03-25T17:13:09.377 に答える