GtkTreeviewColumn,每个列具有不同的组合模型

2024-04-23 20:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一组全局值,例如["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)

我只有一次机会为整个专栏建立一个模型。有什么方法可以为每一行有不同的存储,或者以某种方式过滤值?在


Tags: text模型gtkfooclbarcolumnproperty
2条回答

还有另一种方法。在

另请参见: http://mail.gnome.org/archives/gtk-perl-list/2005-July/msg00065.html

(它是用perl编写的,但是转换成python应该不会太困难)

秘诀是:

假设你有一个树形视图,它使用树形树作为模型。其中一列使用combobox单元格呈现器,每行将获得一个ListStore模型:

  1. 您可以将liststore放入TreeStore列中,在perl中,它将是Gtk2::ListStore类型的列。当然,您不会在TreeView中添加一个直接显示此内容的列。取而代之的是:

  2. 当您将comboboxcell列添加到Treeview时,可以使用“insert_column_with_attributes”并将“model”属性连接到TreeStore的ListStore列,将其用作其列表存储。

  3. 当您向treeview添加一行时,只需将一个完整的ListStore放入TreeStore的ListStore列中。然后,可以使用所需的任何值填充每行的ListStore。

你要找的是^{}。它是一个包含另一个底层树模型的过滤值的树模型。您可以通过调用过滤模型上的set_visible_func()来决定哪些行是可见的。在

相关问题 更多 >