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