对于我的树视图中的每一行,我想要 4 个图像按钮彼此相邻。它们就像单选按钮一样,一次只能激活一个。每个按钮都有一个“开”和“关”的图像。
我该怎么做呢?我想出了如何将图像放在那里,以及如何放置切换按钮,但这似乎需要更多的努力,因为没有预先构建的 cellrenderer 可以满足我的需求。
基本上,解决我的问题的方法是弄清楚如何制作gtk.treeview
可点击的图像。有任何想法吗?
对于我的树视图中的每一行,我想要 4 个图像按钮彼此相邻。它们就像单选按钮一样,一次只能激活一个。每个按钮都有一个“开”和“关”的图像。
我该怎么做呢?我想出了如何将图像放在那里,以及如何放置切换按钮,但这似乎需要更多的努力,因为没有预先构建的 cellrenderer 可以满足我的需求。
基本上,解决我的问题的方法是弄清楚如何制作gtk.treeview
可点击的图像。有任何想法吗?
看看这个' http://www.daa.com.au/pipermail/pygtk/2010-March/018355.html '。它向您展示了如何使 gtk.CellRendererPixbuf 可激活,并能够连接到点击事件信号。
cell = CellRendererPixbufXt()
cell.connect('clicked', func)
更新
正如这个答案所指出的那样,或者给出的参考并不像宣传的那样起作用。它缺少 do_activate 方法,该方法需要发出 clicked 信号。完成后, cell.connect 将起作用。
对不起,如果这个答案误导了任何人。
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)