【发布时间】:2020-07-10 14:48:55
【问题描述】:
我正在使用 C 语言创建一个带有 GTK+3 的 GUI,我想用 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;
}
【问题讨论】:
-
您应该将提供程序添加到 StyleContext 以进行显示。添加到单个小部件的 CSS 无法以预期或非常有用的方式工作。如果那“不起作用”,那么显示你做了什么(小部件代码 和 CSS),并解释发生了什么以及为什么错误 - 因为这对 99.999% 的用户和一个值得打捞。
-
文本正确显示但没有任何样式,除非我在我的 css 文件中使用 * 选择器
-
我们有Object Hierarchy 是有充分理由的,您可以从中选择所需的对象,例如GtkLabel。如果您选择您的对象和You scroll to its Description,您将获得所需的所有答案。