Как автопрокрутить 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())