[pygtk] problem with a tree model sorting
Mike Bernson
mike at mlb.org
Sat Aug 11 07:50:20 WST 2007
I am running ubuntu 7.04 on x386 machine.
Python 2.5.1
pygtk: python-gtk2_2.10.4-0ubuntu3_i386.deb
gtk: libgtk2.0-0_2.10.11-0ubuntu3_i386.deb
I am getting a segfault in "item2 = treemodel.get_value(iter2, column)".
I what I am doing is have a tree_view with a objects that has as a
property the value to be displayed. Since I can not sort the by the
default sort function I have attached a sort function
by
def __init__(self, types):
self.__model = gtk.TreeStore(*types)
self.__types = types
for column in xrange(3, len(types)):
self.__model.set_sort_func(column, self.__compare, column)
self.__model.set_default_sort_func(self.__compare, 2)
column 3 and up have the columns that to be displayed the first few
columns are control info so I can tell where the row came from.
When I click on the header for some columns I get the seg fault.
Here is callback function:
def __compare(self, treemodel, iter1, iter2, column):
print "compare: treemodel: %s iter1: %s iter2: %s column: %s" % (
treemodel, iter1, iter2, column)
print "path1: %s" % treemodel.get_path(iter1)
item1 = treemodel.get_value(iter1, column)
print "path2: %s" % treemodel.get_path(iter2)
item2 = treemodel.get_value(iter2, column)
print "item=%s\nitem2=%s\n\n" % (item1, item2)
# If item not a list (Not sort key)
if item1 is None or isinstance(item1, basic_type):
return self.__compare_2(item1, item2)
# Item is a sort key (list of basic_types to sort on)
print "__compare list of items"
for itema, itemb in zip(item1, item2):
rc = self.__compare_2(itema, itemb)
if rc:
return rc
return 0
Here is the last port a run to if it is any help:
compare: treemodel: <gtk.TreeStore object (GtkTreeStore) at 0x8dcba54>
iter1: <GtkTreeIter at 0xbfbb3e6c> iter2: <GtkTreeIter at 0xbfbb3e5c>
column: 5
path1: 4
path2: 10
item=phone=9035695383
item2=phone=None
compare: treemodel: <gtk.TreeStore object (GtkTreeStore) at 0x8dcba54>
iter1: <GtkTreeIter at 0xbfbb3e6c> iter2: <GtkTreeIter at 0xbfbb3e5c>
column: 5
path1: 9
path2: 1
item=phone=None
item2=phone=None
compare: treemodel: <gtk.TreeStore object (GtkTreeStore) at 0x8dcba54>
iter1: <GtkTreeIter at 0xbfbb3e6c> iter2: <GtkTreeIter at 0xbfbb3e5c>
column: 5
path1: 9
path2: 10
item=phone=None
item2=phone=None
compare: treemodel: <gtk.TreeStore object (GtkTreeStore) at 0x8dcba54>
iter1: <GtkTreeIter at 0xbfbb3e6c> iter2: <GtkTreeIter at 0xbfbb3e5c>
column: 5
path1: 9
Segmentation fault (core dumped)
More information about the pygtk
mailing list