gtk treeview:在行上放置图像按钮

7 投票
3 回答
3562 浏览
提问于 2025-04-16 11:29

我想在我的树形视图的每一行旁边放4个图片按钮,它们就像单选按钮一样,只有一个可以被激活。每个按钮都有“开”和“关”的图片。

我该怎么做呢?我已经搞定了怎么放图片和切换按钮,但这似乎需要更多的努力,因为没有现成的可以满足我需求的单元格渲染器。

基本上,解决我问题的方法是弄清楚如何让gtk.treeview中的图片可以点击。有没有什么好主意?

3 个回答

1

这是我找到的有效方法:

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

这里有一个简化版,不需要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)
2

看看这个 'http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html'。它教你如何让 gtk.CellRendererPixbuf 可以被激活,并且能够连接到点击事件。

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

更新

正如这个回答所指出的,或者说引用的内容并没有像宣传的那样有效。它缺少了 do_activate 方法,这个方法需要发出点击信号。一旦这个方法完成了,cell.connect 就可以正常工作了。

如果这个回答让任何人产生误解,我感到抱歉。

撰写回答