GTK3 GtkCssProvider不起作用

Nat*_*ith 1 gtk3

配置为Ubunutu Server 18.04 LTS / Xorg / openbox / GTK3

我一直在努力弄清楚为什么我不能让GtkCssProvider来处理最基本的项目。如果一直在处理不同的示例,但是这里与另一篇类似。

这是将显示标签的应用程序代码。

#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 0123456789");
GtkCssProvider *    cssProvider     = gtk_css_provider_new();

g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

if( gtk_css_provider_load_from_path(cssProvider, "csstest.css", NULL) )
{
     gtk_style_context_add_provider(gtk_widget_get_style_context(label),
                                        GTK_STYLE_PROVIDER(cssProvider),
                                        GTK_STYLE_PROVIDER_PRIORITY_USER);

    gtk_container_add(GTK_CONTAINER(window), label);
    gtk_widget_show_all(window);

    gtk_main();
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

.CSS文件很简单:

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

一篇文章指出gtk_style_context_add_provider()应替换为gtk_style_context_add_provider_for_screen()调用。两者似乎都没有任何作用。标签以默认样式显示,黑灰色。那么,将Css样式应用于小部件的窍门是什么?

我的要求是要具有可以设置为不同小部件的不同样式。我假设我可以在CSS中创建某种类型的类构造,这将允许我通过gtk_style_context_add_provider()调用将不同的主题应用于相同的小部件。但是我也无法弄清楚。我看到了如何在Css中为特定的命名小部件(通过ID)设置样式,但这似乎只是预定义的statc定义。关于此的任何建议将有所帮助。

eba*_*ssi 5

标签的CSS选择器是label,不是GtkLabel

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

请参阅GtkLabel API参考,其中列出了有效的选择器。

您还应该使用GTK Inspector测试CSS片段。

您可能还需要阅读GTK中CSS处理的API参考,以及GtkStyleContext文档。

  • 关于志愿者工作免费为您提供服务,这真的不是一件好话。如果您想修改文档,请随时打开合并请求,我们很乐意对其进行审核 (3认同)