Pregunta

Estoy tratando de codificar lo siguiente: dos columnas. Uno contiene un elemento, el otro contiene un typeId. Quiero renderizar el itemId solo cuando el typeId es igual a un valor específico.


class IDRenderer(gtk.CellRendererText):

  def __init__(self):
    gtk.CellRendererText.__init__(self)

  def do_render(self,window, widget, background_area, cell_area, expose_area, flags):
    if ----} Condition to ask for value of the typeId - Cell {-----:
      gtk.CellRendererText.do_render(self, window, widget, background_area, cell_area,    
                                     expose_area, flags)

gobject.type_register(IDRenderer)

No sé cómo obtener el ITER de la fila actualmente representada, que necesito para determinar el valor del TypeID. ¿Es esto incluso posible?

¿Fue útil?

Solución

Ahora me enteré, gracias a un buen chico en #Pygtk en Gimpirc:

Puede hacerlo, con las llamadas funciones de datos de celdas llamadas a la correspondiente GTK.TreeviewColumn como se hace aquí en este ejemplo

def renderId(celllayout, cell, model, iter):
  if model.get_value(iter,1) == 3:
    cell.set_property('visible',True)
  else:
    cell.set_property('visible',False)

treeviewcolumn = gtk.TreeViewColumn()
renderer = gtk.CellRendererText()
treeviewcolumn.add_attribute(renderer,'text',0)
treeviewcolumn.set_cell_data_func(renderer,renderId)

Se omití algún código relevante para representar una vista completa, pero creo que muestra lo que quería hacer y cómo hacerlo.

La columna presenta el valor en la primera columna (0) del modelo solo si el valor en el segundo modelo COLUMN (1) es igual a 3

Espero que esto pueda ayudar a alguien en algún momento.

Otros consejos

No es posible hasta donde yo sepa. Debe usar propiedades del renderizador personalizado que se establecerá automáticamente mediante el código que llama a la función de renderizado. (Como el text propiedad de CellRendererText - El código de renderizado no obtiene el texto del modelo de árbol, pero el modelo de árbol establece el text propiedad del renderizador antes de llamar al código de renderizado).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top