【问题标题】:Python GTK +3: Sorting a treeview by clicking on columnPython GTK +3:通过单击列对树视图进行排序
【发布时间】:2021-11-25 17:48:09
【问题描述】:

我希望能够通过单击列来按列对树视图进行排序。我只是使用从文档中获取的流行示例作为参考 (https://python-gtk-3-tutorial.readthedocs.io/en/latest/treeview.html):

        self.treeview = Gtk.TreeView.new_with_model(self.filter)
        for i, column_title in enumerate(["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve"]):
            renderer = Gtk.CellRendererText()
            column = Gtk.TreeViewColumn(column_title, renderer, text=i)
            self.treeview.append_column(column)
            column.set_sort_column_id(i)

除了我得到错误:

(test.py:26081): Gtk-CRITICAL **: 12:35:03.856: gtk_tree_sortable_get_sort_column_id: 断言 'GTK_IS_TREE_SORTABLE (sortable)' 失败

(test.py:26081): Gtk-CRITICAL **: 12:35:03.856: gtk_tree_sortable_has_default_sort_func: 断言 'GTK_IS_TREE_SORTABLE (sortable)' 失败

(test.py:26081): Gtk-CRITICAL **: 12:35:03.856: gtk_tree_sortable_set_sort_column_id: 断言 'GTK_IS_TREE_SORTABLE (sortable)' 失败

【问题讨论】:

标签: python gtk3


【解决方案1】:

this post的帮助下,我想出了一个办法。

编辑以下行:

self.treeview = Gtk.TreeView.new_with_model(self.filter)

self.treeview = Gtk.TreeView.new_with_model(Gtk.TreeModelSort(self.filter))

应该可以工作。

【讨论】:

    【解决方案2】:

    Valentino 给出的答案将只允许用户使用默认排序方法对树进行排序。如果您需要使用自定义函数进行排序,您可以这样做。通过这样做。

    使用过滤器创建一个 Gtk.TreeModelSort 对象并分配一个排序函数。

        sorted_model = Gtk.TreeModelSort(model=self.filter)
        sorted_model.set_sort_func(0, self.sort_tree, None)
    

    然后用这种排序模型设置树视图。

    
        self.tree_view = Gtk.TreeView(model=sorted_model)
    
    

    这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-13
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多