我正在尝试获取一个可以过滤和排序的treemodel(实际上是一个liststore)。我有以下代码
self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
self._visible_filter_function)
self.treeview.set_model(self.modelfilter)
其中self.liststore
和self.treeview
是我从glade文件获得的标准Gtk.ListStore
和Gtk.TreeView
个对象,而self._visible_filter_function
是一个过滤功能。
问题是self.modelfilter
似乎不是可排序的。当我点击(self.treeview
中的列)列标题对它们进行排序时,我得到了
Gtk-CRITICAL **: gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE (sortable)' failed
说树模型不可排序。
这个问题似乎在PyGtk中可以克服,如建议here。我们的想法是将ListStore,TreeModelFilter和TreeSortFilter堆叠在另一个中,并将最后一个作为树视图的模型提供。
然而,这个技巧似乎不适用于Python Gtk + 3。当我尝试
self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
self._visible_filter_function)
self.sorted_and_filtered_model = \
Gtk.TreeModelSort(self.modelfilter)
self.treeview.set_model(self.sorted_and_filtered_model)
抱怨
Gtk.TreeModelSort(self.modelfilter)
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
现在我试图获得一个没有参数的Gtk.TreeModelSort
实例。但是这个实例没有任何set_model
方法。
我迷失在这里。
是否有其他方法可以为Gtk.TreeModelSort
设置模型?或者是否有一种完全不同的方式来获得可以在树视图中显示的已过滤和可排序的treemodel对象?
答案 0 :(得分:6)
>>> from gi.repository import Gtk
>>> mymodel = Gtk.ListStore()
>>> Gtk.TreeModelSort(model=mymodel)
<TreeModelSort object at 0x1d4d190 (GtkTreeModelSort at 0x1f0d3f0)>
在我看来,PyGObject还没有准备好。它没有可浏览的文档,有些东西尚未经过深思熟虑,尤其是:
亲切的问候