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

标签 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();
}

这是我在 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 提供程序不会继承到子样式上下文。因此,您需要使用 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()

关于css - 如何使用 CSS 设置 GtkLabel 的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791670/

相关文章:

css - 单行 Bootstrap 3 上的多个输入

html - 响应式倾斜标签

c - 你如何以编程方式在 Linux 上创建一个完全空的稀疏文件?

我可以使用线程来更改 GTK 镜像吗?

c - 有没有一个示例如何捕获当我用鼠标右键单击任务栏上的图标时的事件?

Javascript - 游戏侧面碰撞(从下到上)

html - Anchor id取消选择google maps api搜索框

C编程与输出混淆

c - 如何从 C 中的列主矩阵中提取 vector ?

c - 使用gtk状态图标没有内存泄漏