如何用CSS设置GtkLabel样式?

我正在尝试使用CSS来设置GtkLabel的样式。 我想更改标签的颜色和字体大小。 这是我的C代码:

#include  int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget *label = gtk_label_new("Label"); GtkCssProvider *cssProvider = gtk_css_provider_new(); gtk_css_provider_load_from_path(cssProvider, "theme.css", NULL); gtk_style_context_add_provider(gtk_widget_get_style_context(window), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_container_add(GTK_CONTAINER(window), label); gtk_widget_show_all(window); gtk_main(); } 

这是我在theme.css CSS,目前这应该只改变字体颜色:

 GtkLabel { color: green; } 

我编译:

 gcc `pkg-config gtk+-3.0 --cflags` test.c -o test `pkg-config --libs gtk+-3.0` 

但是,当我运行代码时,我得到黑色文本。 如果我更改theme.css以使用窗口小部件名称或CSS类而不是GtkLabel ,它仍然无效。 但是,如果我使用*而不是GtkLabel ,它可以工作(虽然我不希望这适用于所有东西)。 这意味着C代码应该是正确的,并且CSS有问题。

目前,CSS提供程序不会inheritance到子样式上下文。 因此,您需要使用gtk_style_context_add_provider_for_screen()将CSS提供程序添加到屏幕

尝试改变

gtk_style_context_add_provider(gtk_widget_get_style_context(window), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

我认为gtk目前不支持多个屏幕,但gtk_widget_get_screen()可用于替换gdk_screen_get_default()