Advanced Treeview Filtering Help

JUAN ERNESTO FLORES BELTRAN juanernestof at hotmail.com
Thu Apr 27 14:45:44 EDT 2006


Hi you all,

I am developping a python application which connects to a database 
(postresql) and displays the query results on a treeview. In adittion to 
displaying the info i do need to implement filtering facility for all the 
columns of the treestore/liststore model in order to allow the user an easy 
search method to find the desired information.

The treestore is created with information related to cars, the columns are:

car_model   car_year   car_color   car_type  car_price
chevrolet      1998       white       sedan     5.000 US$
ford             1996        blue         sedan     3.000 US$
  -                 -             -                -               -
  -                 -             -                -               -
  -                 -             -                -               -

I have been able to allow filtering to only one column,  an extract of my 
code as follows:


------------------------------------------------------------------------------------------------------------------------
   #treestore creation
   self.treestore = gtk.TreeStore(str, str, str, str, str)
   self.modelfilter = self.treestore.filter_new()
   self.treeview=gtk.TreeView()

   #append treestore columns
   self.treestore.append(None, [self.model, self.year, self.color, 
self.type,  self.price]

   #set treestore model to allow filtering by car_model column
   self.modelfilter.set_visible_func(self.visible_cd, self.car_model)

#the function to filter the treestore
def visible_cb(self, treestore, iter, x)
  return treestore.get_value(iter, 0) in x

#self.car_model is a list of items wich change according to user needs and 
can be controlled by  a #secundary treeview or a button  this function is 
not explained.

------------------------------------------------------------------------------------------------------------------------

The code mentioned above does work but i can only fllter  by defining 
criterias in the first column. To allow filtering to all the columns i do 
need the following code to work:

-------------------------------------------------------------------------------------------------------------------------
treemodelfilter.set_modify_func(types, func, data=None)
def func(model, iter, column, user_data)
-------------------------------------------------------------------------------------------------------------------------

where types should be:
types = (str, str, str, str, str)

the function to allow filtering:
def visible_cb(self, treestore, column, iter, x)
  return treestore.get_value(iter, column) in x

and the rest of the code never changes...however it is not woking. Any 
suggestion about the code mention?? am i making mistakes?? where?? do i have 
to pass the column number someway to the visible_cb function??? how??

can any of you suggest a code example to follow and find out how the 
treeview must be coded in order to allow "multicolumn filtering"???

thanks in advance for your support..
Juan





More information about the Python-list mailing list