Тема всех виджетов внутри контейнера GTK + 3 - PullRequest
1 голос
/ 03 апреля 2020

При необходимости стилизовать все виджеты внутри контейнера. Легко стилизовать определенный класс виджетов, например button, но мне нужно применять стиль только к тем, которые принадлежат конкретному контейнеру. В моем случае мне нужно применить тот же стиль к кнопкам внутри hbox_chip. Вот что я попробовал:

#include <gtk/gtk.h>

static void destroy (GtkWidget *window, gpointer data);

int main(int argc, char *argv[]) {

    gtk_init(&argc, &argv);

    GtkWidget *window;
    GtkWidget *vbox;
    GtkWidget *button1;
    GtkWidget *button2;
    GtkWidget *button3;
    GtkWidget *hbox_chip;

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 300, 200);
    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);

    GtkCssProvider *css_provider = gtk_css_provider_new();      /* Apply style */
    gtk_css_provider_load_from_path (css_provider, "style.css", NULL);

    GdkScreen *myScreen = gdk_screen_get_default();
    gtk_style_context_add_provider_for_screen
                        (myScreen,
                        GTK_STYLE_PROVIDER (css_provider),
                        GTK_STYLE_PROVIDER_PRIORITY_USER);


    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
    gtk_container_add(GTK_CONTAINER (window), vbox);

    hbox_chip = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 10);
    gtk_container_add (GTK_CONTAINER (vbox), hbox_chip);

    button1 = gtk_button_new_with_label("1");       /* hbox for buttons */
    gtk_container_add (GTK_CONTAINER (hbox_chip), button1);

    button2 = gtk_button_new_with_label("2");   
    gtk_container_add(GTK_CONTAINER (hbox_chip), button2);

    button3 = gtk_button_new_with_label("3");   
    gtk_container_add(GTK_CONTAINER (hbox_chip), button3);

    GtkStyleContext *context;
    context = gtk_widget_get_style_context(hbox_chip);
    gtk_style_context_add_class(context,"chips");

    gtk_widget_show_all(window);

    gtk_main();

    return 0;
}

/* Stop the GTK+ main loop function when the window is destroyed. */
static void destroy (GtkWidget *window, gpointer data)
{
    gtk_main_quit ();
} 

мой CSS файл выглядит так

window {
  background-color: red;
}

hbox_chip > button{
    color:green;
    box-shadow: 0px 0px 5px black;
    margin-right: 20px;
}

1 Ответ

0 голосов
/ 03 апреля 2020

Вы почти сделали это.

window
{
  background-color:     red;
}

.chips
{
    background-color:   orange;
    color:              green;
    box-shadow:         0px 0px 5px black;
    margin-right:       20px;
}

.chips > button
{
    background-color:   black;
    color:              white;
}


.chips > button:hover
{
    background-color:   yellow;
    color:              red;
}

.chips > button:focus
{
    background-color:   green;
    color:              white;
}

.chips > button:active
{
    background-color:   magenta;
    color:              yellow;
}

Дело в том, что вы уже создали этот класс, но никогда не используете его.

Если вам нужно узнать больше о GTK с CSS проверьте мой канал на YouTube .

enter image description here

...