如何控制gtk.IconView中的选择?

0 投票
2 回答
791 浏览
提问于 2025-04-17 03:56

我想改变一个 gtk.IconView 选择框的透明度或颜色(其实是想让选中的部分更明显)。

我注意到 gtk.IconView 这个控件有一些样式属性,比如 selection-box-alphaselection-box-color,但这些属性只能读取,不能修改。

gtk.TreeSelection 类的 set_select_function() 方法本来可以帮我实现这个功能,但它是用在 gtk.TreeView 上的,我没有找到适合 gtk.IconView 的类似方法。

所以,我该怎么做才能控制选择框,并在用户选择或取消选择时执行某个操作呢?

补充说明:

其实,改变 selection-box-alphaselection-box-color 的值并不是解决办法。我并不想改变选择框的透明度,而是想改变图像的“透明度”(通过与一种颜色合成)。所以,我需要一个适用于 gtk.IconView 控件的 set_select_function 的类似方法。

2 个回答

1

你可以通过创建一个自定义的 gtk.CellRenderer 来设置图像的透明度,这个自定义的渲染器会根据选中状态来绘制图像。然后,把 gtk.IconView 默认的单元格渲染器换成你自己做的这个。

1

其实,我们需要把 gtk.IconView 的默认单元渲染器换成 gtk.CellRendererPixbuf,因为后者有一个叫 follow-state 的属性。

我们通过使用 gtk.CellLayout 类来替换默认的单元渲染器,而 gtk.IconView 是继承了这个类的。

model = gtk.ListStore(gobject.TYPE_STRING, gtk.gdk.Pixbuf, gobject.TYPE_STRING)
iconview = gtk.IconView(model)

renderer = gtk.CellRendererPixbuf()
renderer.set_property('follow-state', True)
iconview.pack_start(renderer)
iconview.set_attributes(renderer,pixbuf=1)  #pixbuf is the column number corresponding to the pixbuf to render in the model

撰写回答