使用gtk + 3和CSS时出现问题

布拉布

我正在使用C语言使用GTK + 3创建GUI,并且我想使用CSS制作应用程序样式。问题在于,除非我在CSS文件中使用*选择器,否则小部件将不接受我赋予它们的样式。第一次,我尝试为所有使用的应用程序制作一个CSS文件,gtk_style_context_add_provider_for_screen()但这没有所以我尝试使用一个函数通过小部件设置样式小部件:

  void SetStyleWidget (GtkCssProvider *CssProvider, char *Path, GtkWidget *Widget)
{
    gtk_css_provider_load_from_path (CssProvider, Path, NULL);
                                                                   
    gtk_style_context_add_provider (gtk_widget_get_style_context(Widget), GTK_STYLE_PROVIDER(CssProvider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); 
                                  
    gtk_style_context_save (gtk_widget_get_style_context(Widget));
}

这也不起作用。我还看到这可能是一个优先级问题,但是无论我添加什么优先级都行不通。有人能回答我的问题吗?

这是我的c文件和css:

#include <stdlib.h>
#include <gtk/gtk.h>
#include <gmodule.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include "RandFuncGTK.h"

int main(int argc, char **argv)
{
    GtkWidget *pWindow;
    GtkWidget *pBoxLevel0;
    GtkWidget *pTitreImg;
    GtkWidget *pBoiteTitreImage;
    GtkWidget *pLabTest;
    GtkCssProvider *CssProvider;

    gtk_init(&argc, &argv);

    CssProvider = gtk_css_provider_new ();

    pWindow = CreateWindow(pWindow, "Test", 1000, 1000);

    pBoxLevel0 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 100);
    gtk_container_add(GTK_CONTAINER(pWindow), pBoxLevel0);

    pLabTest = gtk_label_new("Test");
    SetStyleWidget(CssProvider, "css/labstyle.css", pLabTest);
    gtk_container_add(GTK_CONTAINER(pBoxLevel0), pLabTest);

    gtk_widget_show_all(pWindow);

    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);

    gtk_main();
    return EXIT_SUCCESS;

}

这是我的css文件

GtkLabel {
    color: blue;
}
underscore_d

GTK在版本3.18或更高版本中停止使用小部件类型名称作为CSS节点名称,从那时起,您必须查看C类文档以查看可用于主题的节点名称,类等。这种情况下

label { [...] }

我还建议将StyleContext而不是单个小部件加载到Display。因此,基本上,使用现代版本的GTK(理想情况下为最新版本3.24.x,但至少为3.22)和记录在案的CSS选择器,您就可以开始了。


一旦这样做,如果您只想影响单个小部件,则只需向它们添加CSS类并在这些类上进行选择:

gtk_style_context_add_class(my_label_style_context, "the-precious");

然后在CSS中选择

label.the-precious { [...] }

要不就

.the-precious { [...] }

其他答案中提供了更完整的示例

这比将StyleContexts添加到单个小部件要好,因为这样做往往无法满足用户的期望(在继承等方面)。

您还可以在小部件(如#the-precious上设置CSS ID ,但这并不常用,并且GTK并不需要IMO,而更多的事情是用于设置IMO。


请注意,默认的GTK主题Adwaita在3.24期间已刷新-因此,如果要以此为主题的应用程序,最好从最新的3.24版本开始进行,并希望它在3.x中不会再次更改。 ...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CSS:在Webkit上同时使用对象适配和转换时出现问题

来自分类Dev

(OnsenUi)使用Animate.css和AngularJS时出现问题

来自分类Dev

使用 SCSS/CSS 定位 HTML 元素时出现问题

来自分类Dev

使用mySQL和PHP登录时出现问题

来自分类Dev

使用MySQL和PHP创建表时出现问题

来自分类Dev

使用PHP和MySQLi插入数据时出现问题

来自分类Dev

使用包含条件和通配符的数组时出现问题

来自分类Dev

使用iPad和Ubuntu 12.04时出现问题

来自分类Dev

使用INNER JOIN和复合键时出现问题

来自分类Dev

使用MySQL和PHP创建表时出现问题

来自分类Dev

使用fgets和strcat时出现问题

来自分类Dev

使用PHP和MySQLi插入数据时出现问题

来自分类Dev

使用jQuery和PHP添加类时出现问题

来自分类Dev

使用 Selenium 和 Java 单击按钮时出现问题

来自分类Dev

使用类和索引单击元素时出现问题

来自分类Dev

部署时使用capistrano 3出现问题

来自分类Dev

在快速使用Gtk应用程序中嵌入pylab图形时出现问题

来自分类Dev

在快速使用Gtk应用程序中嵌入pylab图形时出现问题

来自分类Dev

使用Moment模块时出现问题

来自分类Dev

使用ArrayWritables时出现问题

来自分类Dev

使用ejs语法时出现问题

来自分类Dev

使用多个列表时出现问题

来自分类Dev

使用GLM时出现问题

来自分类Dev

使用JQuery Toggle时出现问题

来自分类Dev

使用SAP网站时出现问题

来自分类Dev

使用“清除”命令时出现问题

来自分类Dev

使用viewDidLayoutSubviews时出现问题

来自分类Dev

尝试使用cProfile时出现问题

来自分类Dev

使用 UISearchResults 过滤时出现问题