Up
index

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()

$Id: page.wml,v 1.5 2007-01-04 15:52:08 dakol Exp $

Valid XHTML 1.0! Valid CSS!