可以在GTK中向现有树模型添加列吗?

5 投票
3 回答
2068 浏览
提问于 2025-04-17 10:38

我有一个树形视图,它是从一个树模型中填充数据的。

我想在这个树形视图中添加一列。请问可以从一个单独的树模型中获取这列的数据吗?或者我能在运行时把一列添加到现有的树模型中吗?

3 个回答

0

针对标题中的问题:不,你不能在创建 GtkTreeModel 之后再添加列。

0

在一个 gtk.TreeView 对象中,有一个叫 append_column 的方法,所以是的,你可以通过编程的方式给 gtk.TreeView 添加一列。

不过,我不知道有没有方法可以在已有的模型中添加新列,或者在同一个 gtk.TreeView 中使用多个模型。无论如何,我想你可以创建一个新的模型,里面多一列,然后把之前模型的内容复制过去,再更新树视图来使用这个新模型。

4

你可以根据需要在树形视图中添加任意数量的列,完全不受模型列数的限制。如果你需要的数据在模型中找不到,你可以为某一列设置一个回调函数:

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()

撰写回答