2008-09-19 5 views
4

Si j'écris une application qui veut communiquer de l'information en utilisant la couleur, comment puis-je changer les couleurs d'arrière-plan et de premier plan d'un widget donné? Je voudrais savoir comment faire cela dans la clairière si c'est possible, ainsi que par programmation (à une couleur calculée).Comment changer les couleurs d'un widget arbitraire dans GTK +?

Je veux aussi savoir comment faire ceci pour un widget complexe, par exemple, un HBox qui contient un VBox qui contient quelques Labels.

Idéalement, ce serait également inclure une solution de solution qui me permet de teinte couleurs existantes de widget, et d'identifier les couleurs moyennes de toutes les images utilisées par le thème, afin que je puisse compenser par programme pour tous les choix de couleurs qui pourraient rendre le texte illisible ou autrement contradictoire - mais je serais heureux si je pouvais juste tourner un bouton rouge.

Répondre

8

Exemple de programme:

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

Pour modifier la couleur d'un widget que vous pouvez initialiser une couleur et l'utiliser pour modifier la couleur du widget:

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

Pour utiliser une image au lieu de la couleur:

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)); 
Questions connexes