Pregunta

Si estoy escribiendo una aplicación que desea comunicar cierta información mediante el uso de color, ¿cómo puedo cambiar los colores de fondo y primer plano de un widget determinado?Me gustaría saber cómo hacer esto en Glade, si es posible, así como mediante programación (a un color calculado).

También quiero saber cómo hacer esto con un widget complejo, por ejemplo, un HBox que contiene un VBox que contiene algunos Labels.

Idealmente, esto también incluiría una solución que me permita tinte los colores existentes del widget e identificar los colores promedio de cualquier imagen utilizada por el tema, de modo que pueda compensar mediante programación cualquier elección de color que pueda hacer que el texto sea ilegible o que entre en conflicto, pero sería feliz si pudiera girar un botón. rojo.

¿Fue útil?

Solución

Programa de ejemplo:

#include <gtk/gtk.h>

static void on_destroy(GtkWidget* widget, gpointer data)
{
        gtk_main_quit ();
}

int main (int argc, char* argv[])
{
        GtkWidget* window;
        GtkWidget* button;

        gtk_init(&argc, &argv);
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        g_signal_connect(G_OBJECT (window), "destroy",
                G_CALLBACK (on_destroy), NULL);
        button = gtk_button_new_with_label("Hello world!");
        GdkColor red = {0, 0xffff, 0x0000, 0x0000};
        GdkColor green = {0, 0x0000, 0xffff, 0x0000};
        GdkColor blue = {0, 0x0000, 0x0000, 0xffff};
        gtk_widget_modify_bg(button, GTK_STATE_NORMAL, &red);
        gtk_widget_modify_bg(button, GTK_STATE_PRELIGHT, &green);
        gtk_widget_modify_bg(button, GTK_STATE_ACTIVE, &blue);
        gtk_container_add(GTK_CONTAINER(window), button);
        gtk_widget_show_all(window);
        gtk_main();
        return 0;
}

Otros consejos

La mejor documentación que conozco es la que está disponible aquí: http://ometer.com/gtk-colors.html

Siempre puedes usar gtk_widget_override_color () y gtk_widget_override_background_color ().Estas dos funciones te permiten cambiar el color de un widget.Pero es mejor usar clases y regiones CSS en la implementación de su widget/contenedor a través de gtk_style_context_add_class() y gtk_style_context_add_region().

Para modificar el color de un widget, puede inicializar un color y usarlo para modificar el color del widget:

GdkColor color;
gdk_color_parse("#00FF7F", &color);
gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, &color);

Para usar una imagen en lugar de color:

GdkPixbuf *image = NULL;
GdkPixmap *background = NULL;
GtkStyle *style = NULL;

image = gdk_pixbuf_new_from_file ("background.jpg", NULL);
gdk_pixbuf_render_pixmap_and_mask (image, &background, NULL, 0);
style = gtk_style_new ();
style->bg_pixmap [0] = background;

gtk_widget_set_style (GTK_WIDGET(widget), GTK_STYLE (style));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top