如何更改gtk的交替背景行颜色.pygtk中的TreeView



我正在尝试更改树视图的交替背景色。我知道这通常应该由主题决定,但我想重写以测试gtk样式的功能。根据这里的树视图文档,我了解到treeview有几个只读样式选项,包括"偶数行颜色"、"奇数行颜色"one_answers"允许规则"(根据文档,允许绘制偶数和奇数行颜色)。我知道,为了覆盖那些只读设置,我必须更改gtkrc样式文件或字符串中的样式。

所以我的树视图字符串看起来像:

    gtk.rc_parse_string( """
        style "custom-treestyle"{
            GtkTreeView::odd-row-color = "#00CBFF"
            GtkTreeView::even-row-color = "#90EE90"
            GtkTreeView::allow-rules = 1
        }
        widget "*custom_treeview*" style "custom-treestyle"
    """)
    treeview.set_name("custom_treeview" )

这样解析没有错误,结果是偶数行颜色同时应用于偶数行和奇数行。

编辑:我从更多的测试中发现,我的解析字符串必须被其他一些样式设置覆盖。

print treeview.style_get_property( 'allow-rules' )
print treeview.style_get_property( 'odd-row-color')
print treeview.style_get_property( 'even-row-color')

给出结果:

True
None
None

这些都是默认设置。通常我认为它只是不解析字符串并设置适当的值,但在这种情况下,背景颜色确实更改为我指定的颜色(只是它将每行的背景绘制为一种颜色)。

我做错了什么?

我终于解决了这个样式方法的问题。"allow-rules"样式属性并不是告诉树视图以交替颜色为行上色的唯一属性。根据文档,树视图具有另一个属性,该属性向引擎提示它应该以交替的颜色绘制行。"rules-hint"属性,默认情况下为False,当True成功地将我的TreeView着色为奇数/偶数行的交替颜色时!

因此,在代码中,将这一行添加到问题中的代码中:

treeview.set_rules_hint( True )

就是这样,一个具有交替颜色行的TreeView!

最新更新