可以在GTK中向现有树模型添加列吗?
我有一个树形视图,它是从一个树模型中填充数据的。
我想在这个树形视图中添加一列。请问可以从一个单独的树模型中获取这列的数据吗?或者我能在运行时把一列添加到现有的树模型中吗?
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()