Domanda

Sto cercando di codice seguente: due colonne. Uno contiene un itemId, l'altro contiene un typeid. Voglio rendere l'itemId solo quando il typeid è uguale a un valore specifico.


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)

Non so come ottenere l'iter della riga attualmente reso cui ho bisogno per determinare il valore della typeid. Questo è anche possibile?

È stato utile?

Soluzione

Io ora scoperto, grazie ad un bel ragazzo su #pygtk su gimpIRC:

Si può fare, con rilegatura cosiddette funzioni di dati cella a gtk.TreeViewColumn corrispondente come fatto qui, in questo esempio

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)

I ommited po 'di codice rilevanti per il rendering di una vista ad albero completa, ma penso che mostra quello che volevo fare e come farlo.

La colonna renderes il valore nella prima colonna (0) del modello solo se il valore nella seconda modelcolumn (1) è uguale a 3

Spero che questo potrebbe aiutare qualcuno un po 'di tempo.

Altri suggerimenti

Non è possibile per quanto ne so. È necessario utilizzare le proprietà del renderer personalizzato che verrà impostato automaticamente dal codice chiamando la funzione di rendering. (Come la proprietà text di CellRendererText -. Il codice di rendering non ottiene il testo dal modello ad albero, ma il modello albero imposta la proprietà text del renderer prima di chiamare il codice di rendering)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top