我正在尝试使用Python开发一个GTK应用程序,但我在正确使用gtk.TreeStore
方面遇到了困难。我的主要问题是:我已经解析了一些JSON数据,并且有自己的数据结构,它基本上是一个Python列表和两种对象:一种表示项目集合(集合不能嵌套),另一种表示项目(可能出现在列表中,也可能出现在集合中)。
我已经熟悉了TreeStore
的基本用法,并成功地将项目正确地呈现在屏幕上。我不知道如何处理这样一个事实:treestore只能存储gobject类型(此时我不确定,因为我不太了解gobject类型系统)。C语言的文档列出了以下基本类型(除了PixBuf),可以插入并自动映射到Python数据类型:
此外,它说你可以插入任何例如,gtk_tree_store_new (3, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF); 将创建一个具有三列的新GtkTreeStore,类型分别为int、string和GdkPixbuf。
GType
。文档中的链接直接指向这段话:
我的研究到此结束,谷歌搜索大多是 GTK 2.x 教程,没有关于插入除一个数值,代表已注册类型的唯一标识符。
str
和 int
等其他数据类型的信息。问题如下:
是否可能实现新的 GType(或任何其他接口),以使插入自定义数据到 treestore 成为可能?如何实现?
我已经尝试从GObject
派生,但没有帮助。如何消除同时保留两个数据结构的情况?
即我的解析结果和 Treestore 中的重复信息。如何处理混合内容?
在我的情况下,我有不同附加信息的集合和项(在树形视图中作为具有或不具有子项的节点呈现)。
str
或int
)与之前插入的项匹配。这样的属性必须是一个键,并且您仍然需要搜索已解析结果的列表,这是相当低效的。
提前感谢您!
与问题无直接关系的附加信息:
我认为编写一个自定义的
TreeModel
是一个可行的挑战,直到我在GTK 2教程中读到了这个信息:
这个信息仍然有效吗?然而,所有这些都是有代价的:除非剥离所有换行符,否则你很难用少于一千行的代码编写出一个有用的自定义模型。尽管编写自定义模型可能并不像听起来那么困难,但如果你需要跟踪大量数据,这样做可能会值得,因为它将带来更加合理的代码。
我刚刚发现了http://www.pygtk.org/articles/subclassing-gobject/sub-classing-gobject-in-python.htm 这个网站。这对你有帮助吗?像许多资源一样,它适用于PyGTK 2.0。已过时。