如何自动滚动 gtk.scrolledwindow?
我在一个叫做ScrolledWindow
的窗口里放了一个树形视图(treeview-widget),这个树形视图是在程序运行时动态填充数据的。我希望这个ScrolledWindow
能自动滚动到列表的底部。为了解决这个问题,我每次往树形视图里插入一行数据时,就调整ScrolledWindow
的vadjustment
(垂直调整值)。比如:
if new_line_in_row:
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
如果我在交互式的ipython环境中运行这段代码,并自己手动设置这个值,一切都能正常工作。
但是如果我用默认的python解释器来运行这段代码,自动滚动就不总是有效。我调试了一下代码,发现问题似乎是调整值有点“延迟”,只有在过了一段时间后才会改变。
我想问的是:怎样才能可靠地滚动到ScrolledWindow
的最大位置?有没有什么特殊的信号可以使用?或者有没有更好的方法来设置adjustment-value
?
6 个回答
8
这是关于Python和Gtk 3的内容。
这行代码的意思是:把一个叫做“adj”的东西的值设置为“adj”能获取的最大值减去“adj”能获取的页面大小。
简单来说,就是在调整某个东西的值,让它等于最大的可能值减去当前显示的内容大小。
8
fookatchu的回答可以改进一下,这样回调函数就可以被多个小部件使用了:
def treeview_changed( self, widget, event, data=None ):
adj = widget.get_vadjustment()
adj.set_value( adj.upper - adj.pagesize )
30
在我扩大搜索范围后,发现了一个和Ruby相关的答案。因为这个问题和gtk有关,所以用任何语言都可以解决,方法大致是这样的:
你需要把那个会变化的组件,比如说树视图(treeview),连接到gtk.widget
的“size-allocate”信号上,然后把gtk.scrolledwindow
的值设置为“上边界 - 页面大小”。举个例子:
self.treeview.connect('size-allocate', self.treeview_changed)
...
def treeview_changed(self, widget, event, data=None):
adj = self.scrolled_window.get_vadjustment()
adj.set_value( adj.upper - adj.page_size )
这是原帖在ruby-forum.com的链接: