c - 如何为网格中的所有标签添加 css 样式上下文提供程序?

标签 c gtk gtk3

我正在尝试设置 GtkGrid 中所有标签的背景颜色。这是一个简化的示例:

#include <gtk/gtk.h>

static void activate (GtkApplication* app, gpointer user_data)
{
    GtkWidget *window = gtk_application_window_new (app);
    gtk_window_set_title (GTK_WINDOW (window), "Window1");
    gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

    GtkWidget *grid = gtk_grid_new ();
    gtk_container_add (GTK_CONTAINER (window), grid);
    GtkWidget *label1 = gtk_label_new("Hello world!");
    gtk_widget_set_hexpand( label1, TRUE);
    gtk_grid_attach(GTK_GRID (grid), label1, 0,0,1,1);
    GtkWidget *label2 = gtk_label_new("Simple Gtk example");
    gtk_widget_set_hexpand( label2, TRUE);
    gtk_grid_attach(GTK_GRID (grid), label2, 0,1,1,1);
    GtkCssProvider *provider = gtk_css_provider_new ();
    gtk_css_provider_load_from_data (
        provider, "label {background-color: #AAAAAA;}", -1, NULL);
    GtkStyleContext *context = gtk_widget_get_style_context (grid);
    gtk_style_context_add_provider(
        context, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);

    gtk_widget_show_all (window);
}

int main (int argc, char **argv) {
    GtkApplication *app = gtk_application_new(
        "org.gtk.example", G_APPLICATION_FLAGS_NONE );
    g_signal_connect( app, "activate", G_CALLBACK(activate), NULL);
    int status = g_application_run(G_APPLICATION(app), argc, argv);

    g_object_unref (app);
    return status;
}

但是,将样式上下文提供程序添加到网格上下文(如上所示)不起作用。

最佳答案

我修改了您的代码,这将更改标签的背景:

#include <gtk/gtk.h>

static void activate (GtkApplication* app, gpointer user_data)
{
    GtkWidget *window = gtk_application_window_new (app);
    gtk_window_set_title (GTK_WINDOW (window), "Window1");
    gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);

    GtkWidget *grid = gtk_grid_new ();
    gtk_container_add (GTK_CONTAINER (window), grid);
    GtkWidget *label1 = gtk_label_new("Hello world!");
    gtk_widget_set_hexpand( label1, TRUE);
    gtk_grid_attach(GTK_GRID (grid), label1, 0,0,1,1);
    GtkWidget *label2 = gtk_label_new("Simple Gtk example");
    gtk_widget_set_hexpand( label2, TRUE);
    gtk_grid_attach(GTK_GRID (grid), label2, 0,1,1,1);
    GtkCssProvider *provider = gtk_css_provider_new ();
    GdkDisplay *display = gdk_display_get_default();
    GdkScreen *screen = gdk_display_get_default_screen (display);
    gtk_style_context_add_provider_for_screen (screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_USER);
    gtk_css_provider_load_from_data (
        provider, "GtkLabel { background-color: #AAAAAA;}", -1, NULL);

    gtk_widget_show_all (window);
}

int main (int argc, char **argv) {
    GtkApplication *app = gtk_application_new(
        "org.gtk.example", G_APPLICATION_FLAGS_NONE );
    g_signal_connect( app, "activate", G_CALLBACK(activate), NULL);
    int status = g_application_run(G_APPLICATION(app), argc, argv);

    g_object_unref (app);
    return status;
}

结果:

enter image description here

关于c - 如何为网格中的所有标签添加 css 样式上下文提供程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364493/

相关文章:

C文件输入/梯形规则程序

检查输入是否为数字

version-control - 如何使用 Git 更新我的目录和其他内容?

python - 在 Python GUI (GTK) 中拖放文件

gtk - 我可以用什么代替 gtk_container_set_focus_chain()?

python-3.x - 以编程方式将新菜单项添加到菜单项 PyGObject?

c - 这个函数中的 `if(!found)`是如何工作的?

Gtk 按钮 override_background_color 在某些主题上不起作用

c - 当我的系统缺少 GTK 头文件时编译的 c 程序如何执行?

c - 为什么这个 GtkFrame 没有边框?