gtk treeview: разместите кнопки изображения на строках - PullRequest
6 голосов
/ 09 февраля 2011

Для каждой строки в дереве я хочу, чтобы 4 кнопки с изображениями располагались рядом друг с другом. Они будут действовать как переключатели, при этом активируется только одна кнопка. Каждая кнопка имеет изображение «включено» и «выключено».

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

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

Ответы [ 3 ]

2 голосов
/ 16 января 2013

Вот короткая версия без 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)
1 голос
/ 06 июля 2011

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

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

Обновление

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

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

0 голосов
/ 26 декабря 2011

Вот что у меня сработало:

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)
...