Ubuntu 12.10-在 gtk3 TreeView 中设置交替行颜色

Ubuntu 12.10-在 gtk3 TreeView 中设置交替行颜色

Ubuntu 曾经为 gtk TreeView 小部件设置了交替行颜色。一些应用程序现在仍然设置了交替行颜色,比如 Banshee。交替行颜色对我正在开发的应用程序(用 python 2.7 编写,使用 gi.repository 而不是 pygtk)确实很有帮助。

我知道我可以用

treeview.set_rules_hint(True)

但是,这不起作用。有人知道如何启用交替行颜色吗?

答案1

是否set_rules_hint(True)显示交替行颜色取决于主题。Ubuntu 的默认设置 Ambience 不会显示交替行。由于文档状态:

不要仅仅因为您喜欢规则树的外观而使用它;这是主题的问题。即使关闭规则,某些主题也会以交替颜色绘制树行,并且一直喜欢这种外观的用户可以选择这些主题。您应该仅将此函数作为对主题引擎的语义提示来调用,以表明您的树从功能角度使交替颜色变得有用(因为它通常有很多列)。

也就是说,如果你真的想要,你可以强制它。例如,这将在 Ambience 中起作用:

view.set_rules_hint(True)
style_context = self.get_style_context()
css_provider = Gtk.CssProvider()
css = """
    GtkTreeView row:nth-child(even) {
        background-color: shade(@base_color, 0.9);
    }

    GtkTreeView row:nth-child(odd) {
        background-color: shade(@base_color, 1.0);
    }
    """
css_provider.load_from_data(css.encode('UTF-8'))
screen = Gdk.Screen.get_default()
style_context.add_provider_for_screen(screen, css_provider,
                                  Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

不过您需要注意,它可能会在其他主题中失效。有些主题会使用@theme_base_color而不是当然@base_color您可以对颜色进行硬编码,但谁知道这会在用户的主题中看起来如何...

相关内容