gtk.treeviewcolumn没有排序

时间:2010-10-14 00:20:23

标签: python gtk pygtk gtktreeview

我得到了一个可排序的树视图。单击列使其按升序排序,再次单击它使其按降序排序。但是,如果我第三次单击列标题,它会进入某种“未排序”状态,而不是返回升序状态。我将一个函数连接到列的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)

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

没有测试,但尝试

self.hsModelSort.set_default_sort_func (None)

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