Могу ли я добавить столбец к существующей модели дерева в gtk?

У меня есть древовидная структура, которая заполняется из древовидной модели.

Я хотел бы добавить столбец в дерево. Можно ли извлечь данные для этого столбца из отдельной древовидной модели или я могу добавить во время выполнения столбец к существующей древовидной модели?

3 ответа

Решение

Вы можете добавить столько столбцов к древовидному представлению, сколько вам нужно, без ограничения количества столбцов модели. Если необходимые данные отсутствуют в модели, вы можете установить обратный вызов для столбца:

import gtk


def inIta(col, cell, model, iter, mymodel):
    s = model.get_string_from_iter(iter)
    niter = mymodel.get_iter_from_string(s)
    obj = mymodel.get_value(niter, 0)
    cell.set_property('text', obj)


model = gtk.ListStore(str)
model2 = gtk.ListStore(str)
view = gtk.TreeView(model)
rend1 = gtk.CellRendererText()
col1 = gtk.TreeViewColumn('hello', rend1, text=0)
view.append_column(col1)
rend2 = gtk.CellRendererText()
col2 = gtk.TreeViewColumn('ciao', rend2)
col2.set_cell_data_func(rend2, inIta, model2)
view.append_column(col2)

model.append(['hello world'])
model2.append(['ciao mondo'])

win = gtk.Window()
win.connect('delete_event', gtk.main_quit)
win.add(view)
win.show_all()
gtk.main()

В gtk.TreeView возражать append_column метод, так что да, вы можете программно добавить столбец в gtk.TreeView,

Однако я не знаю ни одного метода добавления нового столбца в существующую модель или использования нескольких моделей для одной и той же модели. gtk.TreeView, В любом случае, я думаю, что вы можете создать новую модель с дополнительным столбцом, скопировать содержимое предыдущего и обновить древовидное представление для использования новой модели.

Чтобы ответить на вопрос в заголовке: Нет, вы не можете добавить столбцы в GtkTreeModel после того, как он был создан.

Другие вопросы по тегам