2009-11-19 4 views
1

Si je crée une application, comme ceci:Comment rafraîchir une image dans gtk?

-------------------------------- 
image 1|image 2|image 3| (button) 
-------------------------------- 

Je veux l'image d'application pour changer si je clique sur le bouton:

---------------------------------- 
image A|image B|image C| (button) 
---------------------------------- 

Comment y parvenir?

Ceci est mon code:

#include <gtk/gtk.h> 
static GtkWidget *image1,*image2,*image3; 
static GtkWidget *window; 
static GtkWidget *hbox; 
static GtkWidget *button; 

static void buttonefresh(GtkWidget *button ,gpointer data) 
{ 
    image1 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU); 
    image2 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU); 
    image3 = gtk_image_new_from_stock(GTK_STOCK_QUIT,GTK_ICON_SIZE_MENU); 

    gtk_box_pack_start (GTK_BOX (hbox), image1, FALSE, TRUE, 0); 
    gtk_box_pack_start (GTK_BOX (hbox), image2, FALSE, TRUE, 0); 
    gtk_box_pack_start (GTK_BOX (hbox), image3, FALSE, TRUE, 0); 
    gtk_widget_show (window); 
} 

int main(int argc, char **argv) 
{ 
    gtk_init (&argc, &argv); 

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title (GTK_WINDOW (window), "Image Refresh"); 

    g_signal_connect (G_OBJECT (window), "destroy", 
        G_CALLBACK (gtk_main_quit), NULL); 
    hbox = gtk_hbox_new (FALSE, 5); 
    button=gtk_button_new_with_label("Refresh"); 

    g_signal_connect (G_OBJECT (button), "clicked", 
        G_CALLBACK (buttonefresh), NULL); 
    g_signal_connect (G_OBJECT (button), "destroy", 
        G_CALLBACK (gtk_main_quit), NULL); 

    image1 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU); 
    image2 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU); 
    image3 = gtk_image_new_from_stock(GTK_STOCK_OPEN,GTK_ICON_SIZE_MENU); 

    gtk_box_pack_start (GTK_BOX (hbox), image1, FALSE, TRUE, 0); 
    gtk_box_pack_start (GTK_BOX (hbox), image2, FALSE, TRUE, 0); 
    gtk_box_pack_start (GTK_BOX (hbox), image3, FALSE, TRUE, 0); 
    gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0); 
    gtk_container_add (GTK_CONTAINER (window), hbox); 
    gtk_widget_show_all (window); 
    gtk_main(); 

    return 0; 
} 

Répondre

3

Dans votre rappel pour le clic, il suffit d'appeler l'une des méthodes de GtkImage qui changent l'image, par exemple gtk_image_set_from_image().

Vous devrez peut-être transmettre suffisamment de données à l'aide de l'argument gpointer user_data pour que le rappel sache quelle instance de GtkImage modifier et à quoi le modifier.

Vous devez pas besoin de recréer les widgets GtkImage, juste changer l'image affichée.

Questions connexes