这gtk.TreeModelSort
只是一个模型(访问接口),它实际上并不存储任何东西。事实上,您不需要自己调用它来使您的表可排序。最简单的方法是让 GTK 为您进行排序,这意味着您必须在表中存储 C 数据而不是 Python 对象。因此,将您的make_list()
方法更改为
listmodel = gtk.ListStore(str)
而不是object
. 然后你只需要告诉gtk.TreeView
点击第一列标题应该根据第一列gtk.ListStore
排序
self.tvcolumn[0].set_sort_column_id(0)
进入你的构造函数。要按文件大小排序,您需要int
在列表存储中添加一个额外的列,并将其用作排序列 ID 等。
编辑:好的,让我拼出最后一件事:
listmodel = gtk.ListStore(str, int)
for f in files:
file_size = os.stat(os.path.join(self.dirname, f)).st_size
listmodel.append([f, file_size])
将文件大小放在存储的第二列。然后,要按文件大小排序,您只需添加
self.tvcolumn[1].set_sort_column_id(1)
一般来说,我会建议重组你的代码,让所有的东西都存储在ListStore
一个开头。这样,您只需将每个视图列绑定到存储列,就可以更轻松地编写单元格渲染代码。