1

我已经得到了一个可排序的树视图工作。单击列使其按升序排序,再次单击使其按降序排序。但是,如果我第三次单击列标题,它会进入某种“未排序”状态,而不是返回到升序状态。我将一个函数连接到列的clicked信号,并打印出列的get_sort_order(),并且对于每次单击,我得到SORT_ASCENDING升序、SORT_DESCENDING降序和SORT_DESCENDING“未排序”状态。我的树视图构造是这样的:

    self.hsModel = gtk.TreeStore(*[c[0] for c in columns])
    self.hsModelFilter = self.hsModel.filter_new()
    self.hsModelSort = gtk.TreeModelSort(self.hsModelFilter)
    #... define filterfunc ...
    self.hsModelFilter.set_visible_func(filterfunc)
    self.hsSelect = gtk.TreeView(self.hsModelSort)

    cl = gtk.TreeViewColumn(ctitle, renderer, **attrcols)                    
    cl.set_clickable(True)
    cl.set_sort_column_id(COL_ACTUALTIME)

    #... define sortdate ...
    self.hsModelSort.set_sort_func(COL_ACTUALTIME, sortdate)
    self.hsModelSort.set_sort_column_id(COL_ACTUALTIME, gtk.SORT_DESCENDING)

永远不想处于这种“未分类”的状态。我希望它按升序或降序排序。如何摆脱“未分类”状态?

4

2 回答 2

1

有效,但是您将self.hsModelSort.set_default_sort_func(None)失去原始状态(以前的任何排序),如果这是您想要的,那么这就是解决方案,如果您想保留原始表单,则必须将默认函数设置为将列排序到原始状态。

很可能您已经首先按降序对值进行了排序,因此您只需要执行以下操作:

self.hsModelSort.set_sort_column_id(COL_ACTUALTIME, gtk.SORT_ASCENDING) self.hsModelSort.set_default_sort_func(无)

我希望这能澄清我的观点:

import gtk

w = gtk.Window()
w.resize(300, 300)

cols = [(1,8,3),
        (7,12,9),
        (4,5,6),
        (10,11,12)]

model = gtk.ListStore(int, int, int)
model.set_sort_column_id(0, gtk.SORT_ASCENDING)
model.set_default_sort_func(None )

#sort columns in ascending order for the column 0
cols.sort(lambda x,y: cmp(x[0],y[0]), reverse=True)

for c in cols:
    model.append(c)

tv = gtk.TreeView(model)
tv.set_headers_clickable(True)

columns = ('one', 'two', 'three')
renderer = gtk.CellRendererText()
for i, c in enumerate(columns):
    col = gtk.TreeViewColumn(c, renderer)
    col.add_attribute(renderer, 'text', i)
    col.set_clickable(True)
    col.set_sort_column_id(0)
    col.set_sort_indicator(True)
    tv.append_column(col)

w.add(tv)
w.show_all()
w.connect('destroy', lambda _: gtk.main_quit())
gtk.main()
于 2010-11-29T09:08:55.193 回答
0

没有测试,但是试试看

self.hsModelSort.set_default_sort_func (None)

有帮助。默认值只是“使用基础订单”,但应该可以重置为“根本没有排序功能”状态。

于 2010-10-14T19:44:45.020 回答