如何使用CSS设置GtkLabel样式?

gsi*_*011 6 css c gtk gtk3

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

#include <gtk/gtk.h>

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();
}
Run Code Online (Sandbox Code Playgroud)

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

GtkLabel {
    color: green;
}
Run Code Online (Sandbox Code Playgroud)

我编译:

gcc `pkg-config gtk+-3.0 --cflags` test.c -o test `pkg-config --libs gtk+-3.0`
Run Code Online (Sandbox Code Playgroud)

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

小智 9

目前,CSS提供程序不会继承到子样式上下文.因此,您需要使用CSS添加CSS提供程序gtk_style_context_add_provider_for_screen()

尝试改变

gtk_widget_get_screen()

至

gdk_screen_get_default()

我不认为这些天gtk支持多个屏幕,但gtk_style_context_add_provider_for_screen()可以用来代替gtk_widget_get_screen().