Python Gtk + 3中的已排序和过滤的树模型.?

Vij*_*thy 6 python pygtk pygobject gtk3

我试图获得一个可以过滤和排序的treemodel(实际上是一个liststore).我有以下代码

self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
            self._visible_filter_function)
self.treeview.set_model(self.modelfilter)
Run Code Online (Sandbox Code Playgroud)

从格拉德文件中获取的标准和对象的位置self.liststore和过滤函数.self.treeviewGtk.ListStoreGtk.TreeViewself._visible_filter_function

问题是self.modelfilter似乎不是可排序的.当我点击列标题(列中的列self.treeview)来对它们进行排序时,我得到了

Gtk-CRITICAL **: gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE (sortable)' failed
Run Code Online (Sandbox Code Playgroud)

说树模型不可排序.

这个问题似乎可以克服在PyGTK中的建议在这里.我们的想法是将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)
Run Code Online (Sandbox Code Playgroud)

它抱怨

Gtk.TreeModelSort(self.modelfilter)
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

现在我试图得到一个Gtk.TreeModelSort没有参数的实例.但是这个实例没有任何set_model方法.

我迷失在这里.

有没有其他方法来设置模型Gtk.TreeModelSort?或者是否有一种完全不同的方式来获得可以在树视图中显示的已过滤和可排序的treemodel对象?

Hav*_*vok 8

>>> from gi.repository import Gtk
>>> mymodel = Gtk.ListStore()
>>> Gtk.TreeModelSort(model=mymodel)
<TreeModelSort object at 0x1d4d190 (GtkTreeModelSort at 0x1f0d3f0)>
Run Code Online (Sandbox Code Playgroud)

在我看来PyGObject尚未准备好.它没有可浏览的文档,有些东西尚未经过深思熟虑,尤其是:

  • 有时候一个小部件可以使用Gtk.MyWidget(attr = foo),就像这个一样.
  • 有时使用Gtk.MyWidget.new_with_label('Foo'),就像按钮一样.是的,Gtk.MyWidget(label ='Foo')不起作用.

亲切的问候