如何使用自定义 CellRendererText 创建 Gtk Iconview

Posted

技术标签:

【中文标题】如何使用自定义 CellRendererText 创建 Gtk Iconview【英文标题】:How do I create a Gtk Iconview with a custom CellRendererText 【发布时间】:2012-12-18 10:19:20 【问题描述】:

我正在研究如何在 Python(2.7 或更高版本)中创建一个 GtkIconView,该 GtkIconView 具有用于 IconView 的文本元素的自定义 CellRendererText。

这样做的原因是我需要在创建图标视图期间覆盖某些属性。

环顾四周,我发现了 PyGtk for TreeViews 的这个示例 - 类似,但我需要一个 IconView 的 Introspection 示例

Set cellrenderertext foreground color when a row is highlighted

我查看了 C++ 文档,但我真的不明白如何将 cellrenderertext 分配给 IconView。

http://developer.gnome.org/gtk3/stable/GtkIconView.html

我再次找到了一些 python 文档来为树视图创建自定义单元渲染器

http://www.scribd.com/doc/99516129/41/CellRendererText

谁能指出我如何修改 IconView 示例的正确方向

【问题讨论】:

【参考方案1】:

官方的做法是使用set_cell_data_func

但是,在 IconView 的上下文中,它与 TreeView 的情况不同(您只需将自定义呈现函数传递给 TreeViewColumn 实例)。

这也让我感到困惑,直到我在 GTK3 Ruby 绑定中找到 this nugget,其中 Kouhei Sutou 演示了使用 GtkCellLayout 接口在 IconView 中设置单元格渲染器。

注意:如果您之前使用诸如 iconView.text_column = TEXT_IDX 之类的设置器设置了列,那么您应该在自定义渲染器就位后将其删除,否则您会看到重复的文本标签。

【讨论】:

【参考方案2】:

Gtk.IconView继承自Gtk.CellLayout,因此可以使用单元格布局功能来替换当前的文本渲染器。类似的东西:

renderers = iconview.get_cells()
iconview.clear()
for r in renderers:
    if not isinstance(r, Gtk.TextRenderer):
        iconview.pack_start(r)
    else:
        iconview.pack_start(my_custom_renderer)

我不知道这是否有效,但我就是这样做的。

【讨论】:

以上是关于如何使用自定义 CellRendererText 创建 Gtk Iconview的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 gtkmm 在 TreeView 中使单个项目变为粗体?

TreeViewColumn标头中的PyGTK Entry小部件

如何使用自定义表单和自定义流程

如何在自定义组件宿主元素上使用自定义指令

如何使用 2 个或更多自定义单元格创建自定义 UICollectionView?

如何在shader中使用自定义函数