2016-11-07 32 views
1

在我的应用程序中,我有一个类来管理我的树(简而言之,就像一个文件系统,其中根包含文件夹,包含文件夹等,文件)。我现在的问题是我有重复的名单,我。即管理文件系统的类以及分别使用数据创建树的TreeView/TreeModel。这是必要的,因为我的类比树中显示的属性有更多的方法和属性。例如,现在,当我删除一个文件时,我更新了我的内部树,并且还必须从TreeModel中删除该项。在Python中使用GTK TreeView/TreeModel同步自己的树列表

是否可以告诉TreeModel/TreeView使用我自己的类?当然,我假设我将不得不修改管理我的树的类,但是我想要的是当我将一个文件添加到我的类中的文件夹时,它会自动添加到TreeView中,当我删除它,或修改它的名字或属性。

使用Python 2.7.12,Ubuntu的16.04,Gtk3(gi.repository,空地等)

回答

1

你可以有你的类实现的TreeModel接口,并直接使用它作为模型,而无需同步在两个班之间!

您的班级延长Gtk.TreeModel,并实施其virtual methods

+0

我刚刚看到有关'TreeModel'的文档,但它没有任何方法来添加/删除元素。我应该使用'TreeStore'(扩展'TreeModel')并且有像append',remove'和'clear'这样的方法吗?如果是这样,我没有看到有关'TreeStore'的虚拟方法的任何文档,那么我该怎么做?如果我想过滤树,怎么办? – okelet

+0

'TreeStore'是一个类,而不是一个接口,所以它没有虚拟方法。您可能可以扩展'TreeStore',但是如果您在[源代码]中查看'remove'的实现(https://github.com/GNOME/gtk/blob/master/gtk/gtktreestore.c #L1206),你会看到它在内部使用'TreeModel'的虚拟方法,如'do_row_deleted'。 – ptomato

+0

要过滤树,请使用['TreeModelFilter'](http://lazka.github.io/pgi-docs/index.html#Gtk-3.0/classes/TreeModelFilter.html#Gtk.TreeModelFilter)。 – ptomato