【问题标题】:Python Webkit autoscrollPython Webkit 自动滚动
【发布时间】:2014-07-19 22:08:21
【问题描述】:

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

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

WebView.load_html_string(html, base)

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

我尝试在每次刷新 web 视图时调整滚动窗口的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

但它不起作用。滚动条似乎会滚动到我想要的位置,但随后它会直接回到起点。

【问题讨论】:

    标签: python webkit gtk


    【解决方案1】:

    问题是您设置了相应的调整,但是 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
    

    【讨论】:

    • 谢谢。这也是我想到的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2014-11-22
    • 1970-01-01
    • 2011-11-05
    • 2023-02-25
    相关资源
    最近更新 更多