[pygtk] filtered and sortable listview

Jan Martinek honza at dp.fce.vutbr.cz
Sat Mar 8 18:08:54 WST 2008


Hello,

I want to make a treeview displaying listview with the possibility of 
sorting and filtering. I must be doing something wrong. This should 
generate numbers from zero through twenty and only even numbers are 
filtered - this works fine.

#!/usr/bin/python
import gtk, random

ls = gtk.ListStore(int)
values = range(20)
random.shuffle(values)
for i in values:
     ls.append((i,))

rend = gtk.CellRendererText()

col = gtk.TreeViewColumn('Number', rend, text = 0)
col.set_sort_column_id(0)


def visiblefunc(model, iter):
     return model.get_value(iter, 0) % 2 == 0

filter = ls.filter_new()
filter.set_visible_func(visiblefunc)

tv = gtk.TreeView(filter)
tv.append_column(col)

w = gtk.Window()
w.add(tv)
w.connect('destroy', gtk.main_quit)
w.show_all()
gtk.main()

But clicking on header does not sort the numbers. I get these errors 
instead:

treeviewtest_visfil.py:29: Warning: invalid cast from 
`GtkTreeModelFilter' to `GtkTreeSortable'
   gtk.main()
treeviewtest_visfil.py:29: GtkWarning: 
gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE 
(sortable)' failed
   gtk.main()
treeviewtest_visfil.py:29: GtkWarning: 
gtk_tree_sortable_has_default_sort_func: assertion `GTK_IS_TREE_SORTABLE 
(sortable)' failed
   gtk.main()
treeviewtest_visfil.py:29: GtkWarning: 
gtk_tree_sortable_set_sort_column_id: assertion `GTK_IS_TREE_SORTABLE 
(sortable)' failed
   gtk.main()


Thank you for help,
Jan Martinek


More information about the pygtk mailing list