gtk.treeviewcolumn не сортирует - PullRequest
       15

gtk.treeviewcolumn не сортирует

1 голос
/ 14 октября 2010

Я получил сортируемое дерево, работающее. Нажатие на столбцы приводит к сортировке по возрастанию, а повторное нажатие - к сортировке по убыванию. Однако, если я нажимаю на заголовок столбца в третий раз, он переходит в какое-то «несортированное» состояние, а не обратно в восходящее. Я подключил функцию к сигналу 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 ]

1 голос
/ 29 ноября 2010

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()
0 голосов
/ 14 октября 2010

Не тестировал, но попробуйте, если

self.hsModelSort.set_default_sort_func (None)

поможет.Значением по умолчанию является «использовать базовый порядок», но должно быть возможно сбросить его в состояние «без функции сортировки вообще».

...