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

Wes*_*Wes 5 python gtk pygtk gtktreeview

我正在尝试更改树视图的交替背景颜色.我知道这应该通常留给主题,但我想覆盖以测试gtk Style功能.根据这里的treeview文档,我了解到TreeView有几个只读样式选项,包括"偶数行颜色","奇数行颜色"和"允许规则"(根据文档) ,允许绘制偶数和奇数行颜色).我知道为了覆盖那些只读设置,我必须改变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" )
Run Code Online (Sandbox Code Playgroud)

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

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

print treeview.style_get_property( 'allow-rules' )
print treeview.style_get_property( 'odd-row-color')
print treeview.style_get_property( 'even-row-color')
Run Code Online (Sandbox Code Playgroud)

给出结果:

True
None
None
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

Wes*_*Wes 6

我终于弄清楚了这个造型方法的问题.'allow-rules'样式属性不是告诉树视图以交替颜色为行着色的唯一属性.根据文档,树视图有另一个属性,暗示引擎应该以交替的颜色绘制行.'rules-hint'属性,默认为False,当True成功地将我的TreeView以交替的奇数/偶数行颜色着色时!

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

treeview.set_rules_hint( True )
Run Code Online (Sandbox Code Playgroud)

就是这样,一个带有交替彩色行的TreeView!