ListStore / TreeStore中的自定义对象

时间:2011-07-19 18:24:35

标签: python pygtk gtktreeview

我有一个类A的对象列表。这个类实现__str__ / __repr__,因此每个对象都有自己的字符串表示(不一定是唯一的)。我在pygtk中有一个GUI,我有一个只有一列的TreeView小部件。我想用L中的对象的字符串表示来填充它,但是我希望将所选项目作为对象而不是字符串。有没有办法让TreeView存储对象列表,但是将它们显示为stings?如果没有,那么知道TreeView中选择了哪些对象的最佳方法是什么? 问题还在于,根据某些条件,我可以使用整个L填充TreeView,但是使用它的一些子列表,因此TreeView中的项目索引将不对应于L中的项目。

3 个答案:

答案 0 :(得分:6)

您可以将对象存储在一列(gobject.TYPE_PYOBJECT)中,将字符串表示存储在第二列中,然后只显示树视图中的第二列。与此处所做的类似:http://www.learningpython.com/2006/09/02/extending-our-pygtk-application/

答案 1 :(得分:1)

如果您的Glade是3.7.0或更高版本,您可以键入“PyObject”(不带引号)作为ListStore的列类型。然后使用set_cell_data_func从模型中检索对象,并将其表示作为文本传递给CellRenderer。没有要同步的字符串列,也不需要担心索引。

答案 2 :(得分:0)

如果字符串是唯一的,您可以使用字典通过使用字符串作为键将字符串与对象链接。在这种情况下,您可以通过其字符串找到对象。