ListStore/TreeStore中的自定义对象
我有一个对象列表 L,这些对象都是我自己定义的类 A 的实例。这个类里有两个方法 __str__
和 __repr__
,所以每个对象都有自己的字符串表示(不一定是唯一的)。我在用 pygtk 做一个图形界面,里面有一个 TreeView 组件,只有一列。我想把 L 中对象的字符串表示放到这个 TreeView 里,但我希望在选择了某些项目后,能得到这些项目对应的对象,而不是字符串。有没有办法让 TreeView 存储对象列表,但显示它们的字符串呢?如果不行,那我该怎么知道在 TreeView 中选中了哪些对象呢?还有一个问题是,根据一些条件,我可能只会把 L 的一部分填充到 TreeView 中,这样 TreeView 中的项目索引就和 L 中的不对应了。
3 个回答
0
如果这些字符串是独一无二的,你可以用一个字典来把字符串和对象联系起来,字符串作为键。在这种情况下,你可以通过字符串来找到对应的对象。
2
如果你的Glade版本是3.7.0或更新的版本,你可以在ListStore的列类型中输入“PyObject”(不带引号)。然后使用set_cell_data_func这个方法,从模型中获取一个对象,并把它的表示形式作为文本传递给CellRenderer。这样就不需要同步字符串列,也不用担心索引的问题了。
6
你可以把对象存储在一列(gobject.TYPE_PYOBJECT
),然后把它的字符串表示存放在第二列,最后在你的树形视图中只显示第二列。这个方法和这里做的很像:http://www.learningpython.com/2006/09/02/extending-our-pygtk-application/