【发布时间】:2023-02-24 03:57:48
【问题描述】:
我正在尝试为用 c 语言编写的 gtk4 GUI 中的按钮和元素添加自定义着色,来自 docs 我找到了为我正在使用的不同小部件加载和设置 css 类名称的函数,但对于一些未应用样式的原因,我得到一个白色背景的窗口,其中仅包含一个白色按钮
static void activate(GtkApplication * app, gpointer user_data)
{
GtkWidget * window;
GtkWidget * box;
GtkWidget * btn;
GtkWidget * txt;
GtkEntryBuffer * text;
GtkCssProvider * provider;
// create window
window = gtk_application_window_new(app);
gtk_window_set_title(GTK_WINDOW(window), "CSS example");
gtk_window_set_default_size(GTK_WINDOW(window), 800, 800);
// load css file
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_file (provider, g_file_new_for_path ("styles.css"));
gtk_style_context_add_provider_for_display (gtk_widget_get_display (window),
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
// create the box and set the height and width
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_widget_set_halign(box, GTK_ALIGN_CENTER);
gtk_widget_set_valign(box, GTK_ALIGN_CENTER);
// add box to main window
gtk_window_set_child(GTK_WINDOW(window),box);
// create text
text = gtk_entry_buffer_new("hello world", strlen("hello world"));
// create text widget
txt = gtk_text_new();
gtk_text_set_buffer(GTK_TEXT(txt), text);
gtk_window_set_child(GTK_WINDOW(window), txt);
// use css from file
gtk_widget_class_set_css_name(GTK_WIDGET_GET_CLASS (txt), "txt");
// adding button
btn = gtk_button_new_with_label("clickme");
g_signal_connect(btn, "clicked", G_CALLBACK(print_hello), NULL);
gtk_widget_class_set_css_name(GTK_WIDGET_GET_CLASS (btn), ".btn");
gtk_window_set_child(GTK_WINDOW(window), btn);
gtk_window_present(GTK_WINDOW(window));
}
这是styles.css
.txt
{
background-color: blue;
color: black;
}
.btn
{
color: blueviolet;
}
为什么此代码不将 css 应用于 GUI 应用程序
【问题讨论】:
-
可能是访问 CSS 文件有问题,而不是将样式应用于窗口。您是否考虑过测试
gtk_css_provider_load_from_file()...的结果? -
@CiaPan 我怎么会做这样的事情
gtk_css_provider_load_from_file不返回任何东西 -
Woops ... GTK3 用于提供
gboolean类型的返回值和准备struct GError容器以接收错误描述的选项 (doc 3 link),但 GTK4 显然假设没有任何问题 (@987654323) @). -
可能你必须遵循GTK4 CssProvider doc的提示:“要在加载 CSS 时跟踪错误,请连接到
GtkCssProvider::parsing-error信号。” -
由于没有更好的建议出现,我将上面的评论复制到答案中。