gtk treeview: разместить кнопки изображения на строках

для каждой строки в моем treeview я хочу 4 кнопки изображения рядом друг с другом. Они будут действовать как переключатели, только один из которых активируется одновременно. Каждая кнопка имеет изображение " on " и "off".

Как это сделать? Я выяснил, как поместить туда изображения и как поставить кнопки, но это, похоже, требует дополнительных усилий, поскольку нет предварительно построенного cellrenderer, который делает то, что я хочу.

в основном, что бы решить мою проблему-выяснить, как сделать изображение в gtk.treeview кликабельно. есть идеи?

3 ответов


взгляните на это 'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html'. Он показывает вам, как сделать gtk.Cellrendererpixbuf активируется и может подключаться к сигналу события щелчка.

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

обновление

как указано в этом ответе, или приведенная ссылка не работает так, как объявлено. В нем отсутствует метод do_activate,который должен излучать сигнал щелчка. Как только это будет сделано, тогда и камера.подключить работа.

Извините, если этот ответ вводит в заблуждение кого-либо.


вот короткая версия без kiwi требование.

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)

вот что сработало для меня:

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)