Python Webkit自动滚动

时间:2014-07-19 22:08:22

标签: python webkit gtk

我已将WebKit.WebView()添加到Gtk.ScrolledWindow()

我希望webview能够使用以下方式不断加载本地HTML文件:

WebView.load_html_string(html, base)

网页越来越长,每次刷新时,滚动窗口都会滚动回到顶部。我想阻止这一点,但我遇到了困难。

我每次刷新webview时都尝试调整滚动窗口的vadjustment,但这不起作用。

这是我到目前为止所拥有的:

previous = scrolled_window.get_vadjustment().value #Value before refresh
update_webview() #This method loads the new HTML file
scrolled_window.get_vadjustment().value = previous

但它不起作用。滚动条似乎滚动到我想要的位置,然后它直接移回到开始。

1 个答案:

答案 0 :(得分:0)

问题是你设置了相应的调整,但是HTML需要一些时间来渲染,所以完成加载之后重新调整值。

我曾经通过连接到vadjustment的改变信号来解决这个问题。 此信号的问题在于,当用户滚动时它也会被发出。因此,如果每次发出信号时都设置了值,则用户无法滚动。因此,您必须创建一个条件来检查您是否更改了视图并希望设置调整。

class webviewscroll:
    def __init__(self):
        #webview = ...
        #scrolled_window = ...
        self.vadjustment = scrolled_window.get_vadjustment()
        self.vadjustment.connect('changed', self.on_vadjustment_changed)
        self.scroll_position = {'html_changed': False, 'value': 0}

    def update(self):
        self.scroll_position['html_changed'] = True
        self.scroll_position['value'] = self.vadjustment.get_value()
        self.update_webview() #This method loads the new HTML file

    def on_vadjustment_changed(self, adjustment):
        if self.scroll_position['html_changed'] == True:
            self.vadjustment.set_value(self.scroll_position['value'])
            self.scroll_position['html_changed'] = False