1

ソート可能なツリービューが機能しました。列をクリックすると昇順でソートされ、もう一度クリックすると降順でソートされます。ただし、列ヘッダーを 3 回クリックすると、昇順ではなく、「並べ替えられていない」状態になります。関数を列の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 に答える