source: TreeView sort
import pygtk
pygtk.require("2.0")
import gtk
NAME="TreeView sort"
DATA = [
[0, "zero"],
[1, "one"],
[2, "two"],
[3, "three"],
[4, "four"],
[5, "five"],
[6, "six"],
[7, "seven"],
[8, "eight"],
]
class t_treeview_sort(gtk.Window):
def __init__(self):
gtk.Window.__init__(self)
self.set_title("Treeview")
self.set_geometry_hints(min_width=200)
self.connect("destroy", gtk.main_quit)
self.list = gtk.ListStore(int, str)
self.list.set_sort_func(0, self.compare, 0)
self.list.set_sort_func(1, self.compare, 1)
self.sort_order = gtk.SORT_ASCENDING
for data in DATA:
iter = self.list.append( data )
self.list.set(iter)
self.treeview = gtk.TreeView()
model = self.treeview.get_selection()
model.set_mode(gtk.SELECTION_SINGLE)
r = gtk.CellRendererText()
tc = gtk.TreeViewColumn("Id", r, text=0)
tc.connect("clicked", self.on_column_clicked, 0)
self.treeview.insert_column(tc, -1)
tc = gtk.TreeViewColumn("Text", r, text=1)
tc.connect("clicked", self.on_column_clicked, 1)
self.treeview.insert_column(tc, -1)
self.treeview.set_model(self.list)
self.treeview.set_headers_clickable(True)
self.treeview.connect("cursor-changed", self.on_treeview_cursor_changed)
self.treeview.show()
self.add(self.treeview)
def compare(self, treemodel, iter1, iter2, user_data):
column = user_data
v1 = treemodel.get_value(iter1, column)
v2 = treemodel.get_value(iter2, column)
if v1 == v2:
return 0
elif v1 < v2:
return -1
else:
return 1
def on_column_clicked(self, tc, user_data):
print "column clicked", tc, user_data
column = user_data
self.list.set_sort_column_id(column, self.sort_order)
if self.sort_order == gtk.SORT_ASCENDING:
self.sort_order = gtk.SORT_DESCENDING
else:
self.sort_order = gtk.SORT_ASCENDING
def on_treeview_cursor_changed(self, treeview):
print "Treeview Cursor changed"
s = treeview.get_selection()
(ls, iter) = s.get_selected()
if iter is None:
print "nothing selected"
else:
data0 = ls.get_value(iter, 0)
data1 = ls.get_value(iter, 1)
print "Selected:", data0, data1
t = t_treeview_sort()
t.show()
gtk.main()