我在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
发布于 2011-03-09 00:34:13
扩大搜索范围后,我找到了一个与ruby相关的答案。因为这个问题是与gtk相关的,所以它应该能够用任何这样的语言来解决:
您将更改的小部件(在我的例子中是treeview )与gtk.widget的'size-allocate‘信号连接起来,并将gtk.scrolledwindow值设置为“gtk.scrolledwindow- page_size”。示例:
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上的原始帖子:
hint hint
发布于 2012-01-15 14:52:56
fookatchu的答案可以改进,这样回调就可以被多个小部件使用:
def treeview_changed( self, widget, event, data=None ):
adj = widget.get_vadjustment()
adj.set_value( adj.upper - adj.pagesize )发布于 2014-12-16 09:10:24
Python Gtk 3版本:
adj.set_value(adj.get_upper() - adj.get_page_size())
https://stackoverflow.com/questions/5218948
复制相似问题