Как автоматически прокрутить окно gtk.scrolledwindow? - PullRequest
18 голосов
/ 07 марта 2011

У меня есть виджет дерева внутри 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?

Ответы [ 3 ]

22 голосов
/ 08 марта 2011

После расширения радиуса поиска я нашел ответ, связанный с рубином. поскольку проблема связана с 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:

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

8 голосов
/ 15 января 2012

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

def treeview_changed( self, widget, event, data=None ):
    adj = widget.get_vadjustment()
    adj.set_value( adj.upper - adj.pagesize )
5 голосов
/ 16 декабря 2014

Python Gtk 3 версия:

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

...