如何在pygtk中更改gtk.TreeView的交替背景行颜色?
我正在尝试更改树形视图中交替的背景颜色。我知道这通常应该由主题来处理,但我想自己动手试试gtk样式的功能。根据树形视图的文档这里,我了解到TreeView有几个只读的样式选项,包括“even-row-color”(偶数行颜色)、“odd-row-color”(奇数行颜色)和“allow-rules”(允许绘制偶数和奇数行颜色)。我知道,要想覆盖这些只读设置,我必须在一个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
这些都是默认设置。通常我会认为它只是没有解析字符串并设置相应的值,但在这种情况下,背景颜色确实变成了我指定的颜色(只是它把每一行的背景都涂成了同一种颜色)。
我到底做错了什么?
1 个回答
6
我终于搞明白了我在这个样式方法上的问题。
其实,'allow-rules'这个样式属性并不是唯一能让树形视图(treeview)实现交替行颜色的属性。根据文档,树形视图还有另一个属性,可以提示引擎让它绘制交替颜色的行。这个属性叫做'rules-hint',默认是False,当设置为True时,就能成功让我的树形视图显示交替的奇数和偶数行颜色!
所以,在代码中,把这一行加到问题中的代码里:
treeview.set_rules_hint( True )
就这样,一个有交替颜色行的树形视图就完成了!