【问题标题】:CSS styles are not applied in gtk4 using c language使用c语言的gtk4中不应用css样式
【发布时间】: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 信号。”
  • 由于没有更好的建议出现,我将上面的评论复制到答案中。

标签: css c gtk4


【解决方案1】:

可能你必须遵循GTK4 CssProvider doc的提示:“要在加载 CSS 时跟踪错误,请连接到 GtkCssProvider::parsing-error 信号。”

【讨论】:

    猜你喜欢
    • 2023-02-13
    • 2013-08-21
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多