Вот как мне удалось добиться загрузки по требованию для дерева (список). Мой Gtk.TreeView является дочерним по отношению к Gtk.ScrolledWindow (все построено с полянами, но это не важно)
Я настроил рендеринг в виде дерева, когда Серж сказал :
cell = gtk.CellRendererText()
col = gtk.TreeViewColumn("Column header text")
col.pack_start(cell, True)
col.set_attributes(cell,text=0)
col.set_cell_data_func(cell, self._loadDataTest, treeView)
treeView.append_column(col)
Функция для обработки:
def _loadDataTest(self, column, cell, model, iter, widget):
pageSize = widget.get_parent().get_vadjustment().get_page_size()+20
adjGap = widget.get_parent().get_vadjustment().get_upper() - widget.get_parent().get_vadjustment().get_value()
if widget.is_focus() and model.get_path(iter)[0] >= len(model)-2 and adjGap < pageSize:
for i in range(0, 20): #simulate additional data
model.append(["row%s"%len(model)-1])
time.sleep(0.05) #to pause execution for a while, no need to add data fow times
Теперь новые данные загружаются, когда "до последнего"(вторая снизу) строка видна, а полоса прокрутки почти внизу.В моем случае, сон используется для паузы, пока обновляются gtk.widgets.
Работает с помощью навигации по клавиатуре, перетаскиванием мыши по scrollBar или щелчком мыши по кнопке полосы прокрутки Надеюсь, это кому-нибудь поможет