Как автопрокрутить gtk.scrolledwindow?

У меня есть виджет treeview внутри ScrolledWindow, который заполняется во время выполнения. Я хочу, чтобы ScrolledWindow автоматически прокручивался до конца списка. Я "решил" проблему, отрегулировав vadjustment ScrolledWindow, каждый раз, когда строка вставляется в дерево. например:

if new_line_in_row:
   adj = self.scrolled_window.get_vadjustment()
   adj.set_value( adj.upper - adj.page_size )

Если я запустил код в интерактивном сеансе ipython и задал значение самостоятельно, все будет работать так, как ожидалось.

Если я запускаю код с помощью интерпретатора python по умолчанию, автоматический прокрутка не работает все время. Я отлаживал код, и проблема в том, что значения настройки имеют своего рода "задержку" и изменяются только через некоторый период времени.

Мой вопрос: как прокрутить, надежно, до максимального положения ScrolledWindow? это специальный сигнал, который я могу использовать? или есть лучший способ установить adjustment-value?

Ответы

Ответ 1

После расширения моего радиуса поиска я нашел ответ, связанный с рубином. поскольку проблема связана с gtk, она должна быть разрешена на любом языке, таком как:

вы подключаете виджет, который меняет в моем случае древовидное представление с сигналом gtk.widget 'size-allocate' и устанавливает значение gtk.scrolledwindow на "upper-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:

подсказка подсказки

Ответ 2

Ответ fookatchu можно улучшить, чтобы обратный вызов мог использоваться несколькими виджетами:

def treeview_changed( self, widget, event, data=None ):
    adj = widget.get_vadjustment()
    adj.set_value( adj.upper - adj.pagesize )

Ответ 3

Версия Python Gtk 3:

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