【问题标题】:A sorted and filtered treemodel in Python Gtk+3..?Python Gtk+3 中的排序和过滤树模型..?
【发布时间】:2012-09-11 10:51:05
【问题描述】:

我正在尝试获取可以过滤和排序的树模型(实际上是列表存储)。我有以下代码

self.modelfilter = self.liststore.filter_new()
self.modelfilter.set_visible_func(\
            self._visible_filter_function)
self.treeview.set_model(self.modelfilter)

其中self.liststoreself.treeview 是标准的Gtk.ListStoreGtk.TreeView 对象,我从一个gade 文件中获得,self._visible_filter_function 是一个过滤函数。

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

Gtk-CRITICAL **: gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE (sortable)' failed

说树模型不可排序。

正如here 建议的那样,这个问题在 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)

它抱怨

Gtk.TreeModelSort(self.modelfilter)
TypeError: GObject.__init__() takes exactly 0 arguments (1 given)

现在我尝试获取一个不带参数的Gtk.TreeModelSort 实例。但是这个实例没有任何set_model 方法。

我迷路了。

还有其他方法可以为Gtk.TreeModelSort 设置模型吗?或者是否有完全不同的方法来获取可以在树视图中显示的过滤和排序树模型对象?

【问题讨论】:

    标签: python pygtk gtk3 pygobject


    【解决方案1】:
    >>> from gi.repository import Gtk
    >>> mymodel = Gtk.ListStore()
    >>> Gtk.TreeModelSort(model=mymodel)
    <TreeModelSort object at 0x1d4d190 (GtkTreeModelSort at 0x1f0d3f0)>
    

    在我看来 PyGObject 还没有准备好。它没有可浏览的文档,有些东西还没有被反省,尤其是这个:

    • 有时小部件可以与 Gtk.MyWidget(attr=foo) 一起使用,例如这个。
    • 有时使用 Gtk.MyWidget.new_with_label('Foo'),比如按钮。是的,Gtk.MyWidget(label='Foo') 不起作用。

    亲切的问候

    【讨论】:

    • 太棒了..!这行得通。正如您所说,很难找到这是要走的路,因为文档很少。谢谢。
    猜你喜欢
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多