如何使用 CSS 设置 GtkLabel 的样式?
How to style a GtkLabel with CSS?
我正在尝试使用 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 class 而不是 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 来设置 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 class 而不是 GtkLabel
,它仍然不起作用。但是,如果我使用 *
而不是 GtkLabel
,它会起作用(尽管我不希望它适用于所有内容)。这意味着 C 代码应该是正确的,而 CSS.
目前,CSS 提供程序不会继承到子样式上下文。因此,您需要使用 gtk_style_context_add_provider_for_screen()
尝试改变
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()
。