[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