如何使用自定义 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小部件