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