pygtk: Sobre los treeviews

Lorenzo Gil Sanchez lgs en sicem.biz
Mar Ago 3 12:28:13 CEST 2004


El mar, 03-08-2004 a las 09:46, Marcos Sánchez Provencio escribió:
> Para enganchar a todo el mundo primero, una introducción:
> 
> Las listas y árboles de gtk se gestionan con un modelo MVC, lo que en la
> práctica supone que junto a cada control gtk hay que crear un modelo que
> recoge los datos que se van a mostrar en el control. Para determinar qué
> datos salen en el control, se 'conectan' propiedades del modelo a
> propiedades de la vista: Por ejemplo, le puedo decir algo como "has de
> sacar el texto de la segunda columna del control de la tercera columna
> del modelo, y el color de la cuarta".
> 
> Y ahora, la pregunta:
> 
> ¿Puedo meter en el modelo un objeto (por ejemplo, una definición de
> tabla de base de datos) y decirle "saca el texto de la primera columna
> del nombre de la tabla (la propiedad 'nombre' del objeto), el texto de
> la segunda de la propiedad 'nombreClave' del objeto y el color de la
> columna 'tieneReferencias'?
> 
Si:

modelo = gtk.ListStore(gobject.TYPE_PYOBJECT)
for definicion in mis_definiciones:
	modelo.append((definicion,))

vista = gtk.TreeView(modelo)
renderer = gtk.CellRendererText()
self.columna1 = gtk.TreeViewColumn('Nombre', renderer, text=0)
self.columna1.set_cell_data_func(renderer, self.mi_funcion)
vista.append_column(self.columna1)
self.columna2 = gtk.TreeViewColumn('Clave', renderer, text=0)
self.columna2.set_cell_data_func(renderer, self.mi_funcion)
vista.append_column(self.columna2)

def mi_funcion(self, columna, renderer, modelo, iter):
	definicion = modelo.get_value(iter, 0)
	if self.columna1 == columna:
		renderer.set_property('text', definicion.nombre)
	elif self.columna2 == columna:
		renderer.set_property('text', definicion.nombreClave)
		renderer.set_property('background',
					definicion.tieneReferias)

Como ves, el truco es el metodo TreeViewColumn.set_cell_data_func

Lorenzo

> Gracias.
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es




Más información sobre la lista de distribución Python-es