如何在gtk中刷新图像?

问题描述:

如果我创建一个应用程序,就像这样:如何在gtk中刷新图像?

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

我想,如果我按一下按钮应用图像改变:

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

如何做到这一点?

这是我的代码:

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

在回调的点击,只需调用任何功能改变了图像GtkImage的方法,例如gtk_image_set_from_image()

您可能需要使用gpointer user_data参数传递足够的数据,以便回调知道要更改哪个GtkImage实例以及要更改它。

您应该不是需要重新创建GtkImage小部件,只需更改显示的图像。