我有一组全局值,例如["Foo", "Bar", "Baz", "Quux"]
。myTreeView
中的每一行代表一个只能处理这些值的子集的实体。例如,第一行可能处理"Foo"
和{"Bar"
和{ComboBox
列,允许每一行选择它可以处理的值之一。在
但是,根据我现在的代码,整个列只能有ComboBox
的一个模型:
crc = gtk.CellRendererCombo()
crc.set_property('model', fooValuesModel)
crc.set_property('text-column', 0)
crc.set_property('editable', True)
crc.set_property('has_entry', False)
cl = gtk.TreeViewColumn(ctitle, crc, text=i)
treeView.append_column(cl)
我只有一次机会为整个专栏建立一个模型。有什么方法可以为每一行有不同的存储,或者以某种方式过滤值?在
还有另一种方法。在
另请参见: http://mail.gnome.org/archives/gtk-perl-list/2005-July/msg00065.html
(它是用perl编写的,但是转换成python应该不会太困难)
秘诀是:
假设你有一个树形视图,它使用树形树作为模型。其中一列使用combobox单元格呈现器,每行将获得一个ListStore模型:
您可以将liststore放入TreeStore列中,在perl中,它将是
Gtk2::ListStore
类型的列。当然,您不会在TreeView中添加一个直接显示此内容的列。取而代之的是:当您将comboboxcell列添加到Treeview时,可以使用“insert_column_with_attributes”并将“model”属性连接到TreeStore的ListStore列,将其用作其列表存储。
当您向treeview添加一行时,只需将一个完整的ListStore放入TreeStore的ListStore列中。然后,可以使用所需的任何值填充每行的ListStore。
你要找的是^{} 。它是一个包含另一个底层树模型的过滤值的树模型。您可以通过调用过滤模型上的
set_visible_func()
来决定哪些行是可见的。在相关问题 更多 >
编程相关推荐