2011-02-09 11 views
6

Per ogni riga nella mia visualizzazione struttura, voglio 4 pulsanti immagine uno accanto all'altro. Agiranno come pulsanti radio, con solo uno attivabile alla volta. Ogni pulsante ha un'immagine "attiva" e "disattivata".gtk treeview: posiziona i pulsanti immagine su righe

Come posso fare? Ho scoperto come mettere le immagini lì e come mettere i pulsanti di comando, ma questo sembra richiedere uno sforzo maggiore in quanto non c'è un cellerenderer pre-costruito che faccia ciò che voglio.

Fondamentalmente quello che ha risolto il mio problema è capire come fare un'immagine in un gtk.treeview cliccabile. qualche idea?

risposta

1

Dai un'occhiata a questo 'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html '. Ti mostra come rendere un attivatore gtk.CellRendererPixbuf attivabile e in grado di connettersi al segnale di un evento click.

cell = CellRendererPixbufXt() 
cell.connect('clicked', func) 

Aggiornamento

Come sottolineato questa risposta, o il riferimento dato non funziona come pubblicizzato. Manca il metodo do_activate, che deve emettere il segnale cliccato. Una volta fatto ciò, il file cell.connect funzionerà.

Ci scusiamo se questa risposta fuorvia chiunque.

+0

In realtà, il tuo riferimento non lo mostra ... – schlamar

+0

Non so cosa stai guardando ma il mio riferimento è. Ho notato che la tua risposta fa più o meno la stessa cosa del riferimento che ho dato. Se ti lamenti di qualcos'altro, per favore sii un po 'più chiaro –

+0

Il segnale "cliccato" non viene mai attivato. In realtà, questa non è una grande sorpresa se cito dal tuo riferimento: "ma non sono sicuro di come emettere il segnale personalizzato" cliccato ", quando l'utente fa clic su sul CellRenderer." – schlamar

0

Ecco cosa ha funzionato per me:

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 
    gsignal('clicked', str) 
    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 
    def do_activate(self, event, widget, path, background_area, cell_area, flags): 
     self.emit('clicked', path) 
+0

Suppongo che tu faccia riferimento a 'kiwi.utils.gsignal'? – schlamar

2

Ecco una versione breve, senza kiwi requisito.

class CellRendererClickablePixbuf(gtk.CellRendererPixbuf): 

    __gsignals__ = {'clicked': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, 
           (gobject.TYPE_STRING,)) 
        } 

    def __init__(self): 
     gtk.CellRendererPixbuf.__init__(self) 
     self.set_property('mode', gtk.CELL_RENDERER_MODE_ACTIVATABLE) 

    def do_activate(self, event, widget, path, background_area, cell_area, 
        flags): 
     self.emit('clicked', path) 
+0

Sto provando ad usare il tuo codice ma sto ricevendo l'oggetto 'gi.repository.Gtk 'non ha attributo' CELL_RENDERER_MODE_ACTIVATABLE'' - qualche idea per quale motivo? –

+0

Sì, il mio codice è per (Py) Gtk 2. – schlamar