如何自动滚动gtk.scrolledwindow?

Foo*_*chu 18 python gtk pygtk scrolledwindow gtktreeview

我在a里面有一个treeview-widget ScrolledWindow,它在运行时填充.我希望ScrolledWindow自动滚动到列表的末尾.我"解决"问题,通过调整vadjustmentScrolledWindow,每次一个行插入到树视图.例如:

if new_line_in_row:
   adj = self.scrolled_window.get_vadjustment()
   adj.set_value( adj.upper - adj.page_size )
Run Code Online (Sandbox Code Playgroud)

如果我在交互式ipython会话中运行代码并自己设置值,一切都按预期工作.

如果我使用默认的python解释器运行代码,则自动滚动不会一直有效.我调试了代码,问题似乎是,调整值有某种"滞后",只在一段时间后才会改变.

我的问题是:如何可靠地滚动到最大位置ScrolledWindow?是一个特殊的信号生成,我可以使用?还是有更好的方法来设置adjustment-value

Foo*_*chu 22

在扩大搜索范围后,我发现了一个与ruby相关的答案.由于问题是与gtk相关的,它应该可以用这样的任何语言来解决:

你连接小部件,在我的情况下树形视图改变gtk.widget's'大小分配'信号,并将gtk.scrolledwindow值设置为"upper - page_size".例:

self.treeview.connect('size-allocate', self.treeview_changed)
Run Code Online (Sandbox Code Playgroud)

...

def treeview_changed(self, widget, event, data=None):
    adj = self.scrolled_window.get_vadjustment()
    adj.set_value( adj.upper - adj.page_size )
Run Code Online (Sandbox Code Playgroud)

链接到ruby-forum.com上的原始帖子:

提示提示

  • 现在似乎隐藏了成员变量.请改用get_upper()和get_page_size() (5认同)

Chu*_*k R 8

fookatchu的答案可以改进,以便多个小部件可以使用回调:

def treeview_changed( self, widget, event, data=None ):
    adj = widget.get_vadjustment()
    adj.set_value( adj.upper - adj.pagesize )
Run Code Online (Sandbox Code Playgroud)


Fed*_*ico 5

Python Gtk 3版本:

adj.set_value(adj.get_upper() - adj.get_page_size())