Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用CSS设置GtkLabel的样式?_Css_C_Gtk_Gtk3 - Fatal编程技术网

如何使用CSS设置GtkLabel的样式?

如何使用CSS设置GtkLabel的样式?,css,c,gtk,gtk3,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

我正在尝试使用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();
}
我编译时使用:

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提供程序没有继承到子样式上下文。因此,您需要使用
gtk\u style\u context\u add\u provider\u for\u screen()将CSS提供程序添加到屏幕中。

试着改变

gtk_样式_上下文_添加_提供程序(gtk_小部件_获取_样式_上下文(窗口)),
GTK_样式_提供程序(cssProvider),
GTK_样式_提供者_优先级_用户);

gtk_样式_上下文_为_屏幕添加_提供程序_(gdk_屏幕_获取_默认值(),
GTK_样式_提供程序(cssProvider),
GTK_样式_提供者_优先级_用户);

我认为gtk现在不支持多屏幕,但是
gtk\u widget\u get\u screen()
可以用来替换
gdk\u screen\u get\u default()

您忽略了
gtk\u css\u提供者从路径加载的错误()。使用最后的论点;如果函数返回
FALSE
,请检查它以查看有何错误。我感觉选择器不是
GtkLabel
,您缺少了一个
…@andlabs我添加了
(我的代码有它,只是没有问题),我检查了返回值。是真的,嗯。。。尝试将样式提供程序添加到标签的样式上下文中,而不是窗口的样式上下文中。@andlabs有效!但是如果我能为窗口和它的所有子元素提供一个CSS文件,而不是每个小部件都有一个CSS文件,那就太好了;您只需要为CSS选择器添加更高的特定性。尝试使用CSS类而不是小部件名称,并将同一类与
gtk\u style\u context\u add\u class()
一起使用。
gcc `pkg-config gtk+-3.0 --cflags` test.c -o test `pkg-config --libs gtk+-3.0`