我用C语言用GTK+3创建了一个图形用户界面,我想用CSS制作这个应用程序的样式。问题是小部件不接受我给他们的样式,除非我在CSS文件中使用*选择器。第一次,我试着用gtk_style_context_add_provider_for_screen()
为所有应用程序创建一个CSS文件,但这不起作用。因此,我尝试使用一个函数按小部件设置样式小部件:
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;
}
发布于 2020-07-10 08:00:02
GTK停止在版本3.18左右中使用小部件类型名称作为CSS节点名,从那时起,您必须检查C类文档,以查看哪些节点名称、类等可用于主题。在这个案例中,它将是
label { [...] }
我还建议将StyleContext加载到显示中,而不是单个小部件。因此,基本上,使用一个现代版本的GTK (最好是最新的3.24.x点,但至少是3.22点)和文档化的CSS选择器,这样就可以了。
这样做之后,如果您只想影响各个小部件,那么只需向它们添加CSS类并在这些类上选择:
gtk_style_context_add_class(my_label_style_context, "the-precious");
然后在CSS中选择on
label.the-precious { [...] }
或者只是
.the-precious { [...] }
在另一个答案中有一个更完整的示例。
这比将StyleContexts添加到各个小部件要好,因为这样做不符合用户的期望(在继承等方面)。
您也可以在小部件(如#the-precious
)上设置CSS in,但这并不经常使用,而IMO在GTK中并不真正需要,更像是一个faff来设置IMO。
请注意,默认的GTK主题Adwaita是在3.24期间刷新的--因此,如果您想根据该主题对应用程序进行主题化,最好从最新版本的3.24中进行,并希望它不会在3.x中再次更改.
https://stackoverflow.com/questions/62836836
复制