默认情况下或以编程方式对树视图中的列进行排序

时间:2013-09-23 07:48:27

标签: python treeview gtk3

我知道我的问题已在此处提出:

How to Programmatically Sort TreeView

但是给出的链接没有任何关联,当我的窗口显示时,我仍然无法对我的树视图进行排序。

这是我的代码:

    treeview = Gtk.TreeView(model=liststore)
    col = renderer_text('Nom', 1, store=liststore, sortable=True)
    col.set_sort_order(Gtk.SortType.ASCENDING) #??????????????????????????
    treeview.append_column(col)

def renderer_text(title, col, editable=False, store=None, sortable=None):
    render = Gtk.CellRendererText()
    if editable:
        render.set_property('editable', True)
        render.connect('edited', text_edited, store, col)
    column = Gtk.TreeViewColumn(title, render, text=col)
    if sortable:
        column.set_sort_column_id(col)
    return column

set_sort_order(Gtk.SortType.ASCENDING)本来很棒,但在我的情况下它没有任何排序!

2 个答案:

答案 0 :(得分:6)

如果没有看到更多的代码,很难看出会出现什么问题,但是我会下注完全相同的事情发生在另一个问题中:你需要将你的树模型包装在Gtk.TreeModelSort中。 / p>

sorted_model = Gtk.TreeModelSort(model=liststore)
sorted_model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
treeview = Gtk.TreeView(model=sorted_model)

请注意,在这种情况下,1是模型列的索引,而不是可见的树视图列。

答案 1 :(得分:0)

如果你对简单的词典排序很好,如果你特别懒,想象你正在用glade开发你的界面,也许你可以使用我自己的代码中的以下片段(抱歉,我仍然坚持使用gtk2)。

这个答案中的代码与ptomato类似,但我们处于数据结构的不同部分,它只是名称相同的方法。我只使用普通TreeView和普通ListStore

gtk.TreeViewColumn小部件有一个set_sort_column_id便捷方法,可以设置几乎所有需要的方法。

此处_tvc后缀表示它是gtk.TreeViewColumn个对象。如上所述,所有内容都是在glade文件中创建的:

    self.view.widgets.use_tvc.set_sort_column_id(0)
    self.view.widgets.filename_tvc.set_sort_column_id(1)
    self.view.widgets.accno_tvc.set_sort_column_id(2)
    self.view.widgets.binomial_tvc.set_sort_column_id(3)
    self.view.widgets.iseditable_tvc.set_sort_column_id(5)

此处您有一个来自glade文件的片段,我在其中定义了accno_tvc列,并在其中添加了CellRendererText,指定ListStore中的{保留一些列的数据'属性。

<object class="GtkTreeViewColumn" id="accno_tvc">
  <property name="title" translatable="yes">acc.nr.</property>
  <property name="clickable">True</property>
  <child>
    <object class="GtkCellRendererText" id="accno_crtext">
      <signal name="edited" handler="on_cellrenderertext_edited" swapped="no"/>
    </object>
    <attributes>
      <attribute name="editable">5</attribute>
      <attribute name="text">2</attribute>
    </attributes>
  </child>
</object>

正如您可以看到python代码,它指定在accno_tvc gui列上排序时要使用的数据列,重复与glade文件用于渲染器的#{1}}相同的索引。 ; s 2属性。