我知道我的问题已在此处提出:
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)本来很棒,但在我的情况下它没有任何排序!
答案 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
属性。