我正在使用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;
}
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] 删除。
我来说两句