我有一个 A 类对象的列表 L。这个类实现了
__str__
/__repr__
,所以每个对象都有它自己的字符串表示(不一定是唯一的)。我在 pygtk 中有一个 GUI,其中有一个只有一列的 TreeView 小部件。我想用 L 中对象的字符串表示形式填充它,但随后我想将选定的项目作为对象而不是字符串获取。有没有办法让 TreeView 存储对象列表,但将它们显示为字符串?如果没有,那么了解 TreeView 中选择了哪些对象的最佳方法是什么?
问题还在于,根据某些条件,我可以不使用整个 L 来填充 TreeView,而是使用它的一些子列表,因此 TreeView 中的项目索引不会与 L 中的项目索引相对应。
您可以将对象存储在一列中 (
gobject.TYPE_PYOBJECT
),将字符串表示形式存储在第二列中,然后仅在树视图中显示第二列。与这里所做的类似:
如果您的 Glade 是 3.7.0 或更高版本,您可以键入“PyObject”(不带引号)作为 ListStore 的列类型。然后使用 set_cell_data_func 从模型中检索对象并将其表示形式作为文本传递给 CellRenderer。无需同步字符串列,也无需担心索引。
如果字符串是唯一的,您可以使用字典将字符串与对象链接起来,并使用字符串作为键。在这种情况下,您可以通过字符串找到对象。