ListStore/TreeStore 中的自定义对象

问题描述 投票:0回答:3

我有一个 A 类对象的列表 L。这个类实现了

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

python pygtk gtktreeview
3个回答
6
投票

您可以将对象存储在一列中 (

gobject.TYPE_PYOBJECT
),将字符串表示形式存储在第二列中,然后仅在树视图中显示第二列。与这里所做的类似:

学习 python » 博客档案 » 扩展我们的 PyGTK 应用程序


2
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.