Frage

Wenn ich eine Anwendung ich schreibe, dass einige Informationen durch die Verwendung von Farbe kommunizieren möchte, wie kann ich ändern, um die Hintergrund- und Vordergrundfarbe eines bestimmten Widget? Ich würde gerne wissen, wie diese in Lichtung zu tun, wenn es möglich ist, sowie programmatisch (zu einer berechneten Farbe).

Ich möchte wissen, wie dies zu einem komplexen Widget zu tun, wie auch zum Beispiel eine HBox, die eine VBox enthält, die einige Labels enthält.

Im Idealfall würde dies auch eine Lösung Lösung, die mir erlaubt, zu Tönung den Widgets vorhandene Farben und identifiziert die durchschnittlichen Farben aller Bilder in Verwendung durch das Thema, so dass ich programmatisch für jede kompensieren kann Farbauswahl, den Text nicht lesbar oder sonst clashing machen könnte -. aber ich wäre froh, wenn ich nur einen Knopf rot könnte

War es hilfreich?

Lösung

Programm Beispiel:

#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;
}

Andere Tipps

Die beste Dokumentation, die ich kenne, ist derjenige finden Sie hier: http://ometer.com/ gtk-colors.html

Sie können jederzeit benutzen gtk_widget_override_color () und gtk_widget_override_background_color () . Diese beiden Funktionen können Sie die Farbe eines Widgets ändern. Aber es ist besser, CSS-Klassen und Regionen in Ihrem Widget / Container Implementierung durch gtk_style_context_add_class() und gtk_style_context_add_region() zu verwenden.

Um die Farbe eines Widgets ändern können Sie eine Farbe initialisieren und es verwenden, um die Farbe des Widgets zu ändern:

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

Um ein Bild zu verwenden, anstatt Farbe:

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top