我已将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
但它不起作用。滚动条似乎滚动到我想要的位置,然后它直接移回到开始。
答案 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