При необходимости стилизовать все виджеты внутри контейнера. Легко задать стиль определенному классу виджетов, например 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 ответ
Ты почти сделал это.
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 .
Похожие вопросы
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.