Css 使用GtkStyleProviders定制小部件字体、颜色和背景的正确方法

Css 使用GtkStyleProviders定制小部件字体、颜色和背景的正确方法,css,fonts,colors,gtk,styling,Css,Fonts,Colors,Gtk,Styling,在试图清除一些关于弃用的警告时,Gtk.Widget.modify_base,Gtk.Widget.modify_font,我发现建议的替换方法,override_background_color(以及字体和颜色的等价物)也被弃用。我现在正在尝试解决如何为小部件提供这些样式 字体、颜色和背景用于自定义TextView小部件,这些值作为某些首选项的一部分存储在某些字符串中,以便用户可以为几种不同的内容自定义颜色 对于字体和文本颜色,似乎最好的方法是使用适当的样式创建Gtk.TextTags,并将文

在试图清除一些关于弃用的警告时,
Gtk.Widget.modify_base
Gtk.Widget.modify_font
,我发现建议的替换方法,
override_background_color
(以及字体和颜色的等价物)也被弃用。我现在正在尝试解决如何为小部件提供这些样式

字体、颜色和背景用于自定义
TextView
小部件,这些值作为某些首选项的一部分存储在某些字符串中,以便用户可以为几种不同的内容自定义颜色

对于字体和文本颜色,似乎最好的方法是使用适当的样式创建
Gtk.TextTag
s,并将文本缓冲区上的
insert()
的任何实例更改为
insert\u with_tags()
。TextBuffers和TextTags似乎没有“默认样式”概念

但是,文本标记不会处理整个文本视图的背景

建议的方法似乎是
GtkStyleProvider
,但是我应该如何将这些用户指定的颜色输入到提供者中呢

许多示例加载如下所示的字符串常量:

string style = """
    GtkButton {color:#ff00ea; font:Serif 12;}
    GtkButton:hover {background-color:#3085a9;}
    GtkLabel {background-color:#898989;}
    GtkEntry {background-color:green; color:red;}
""";
CssProvider provider = new CssProvider();
provider.load_from_data(style,-1);
但在这种情况下,每次配置更改时,我都必须手动格式化字符串并将其插入一大块CSS中,然后将其反馈到样式中,这看起来相当混乱。我也不确定加载后是否可以更改,因为似乎没有更改信号

我想另一种方法是以某种方式继承
GtkStyleProvider
并实现我自己的,但这对于设置一些颜色来说似乎有些过分,而且似乎几乎没有相关文档

大多数GTK+程序(甚至GNOME程序)似乎只是以“旧”的方式使用
modify\u*
override\u*
并忽略不推荐的内容,我不清楚是否有少数使用CSS的程序可以在加载后对其进行更改

这是唯一的两个选择吗?哪一个是“正确的”