사용자가 buttion을 클릭 할 때 GtkImage에서 이미지를 변경하려고하므로 아래 코드를 시도했지만 작동하지 않습니다.응용 프로그램이 실행 중일 때 GtkImage의 "file"속성을 변경하는 방법
/*
* Compile me with:
* gcc -o tut tut.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)
*/
#include <gtk/gtk.h>
G_MODULE_EXPORT gboolean on_button1_clicked(
GtkWidget *event_box,
GdkEventButton *event,
gpointer data)
{
GtkImage *image;
image = GTK_IMAGE(data);
g_return_val_if_fail(image, FALSE);
g_object_set(image, "file","/home/2.png", NULL);
g_print ("Event box clicked at coordinates %f,%f\n",
event->x, event->y);
/* Returning TRUE means we handled the event, so the signal
* emission should be stopped (don't call any further
* callbacks that may be connected). Return FALSE
* to continue invoking callbacks.
*/
return TRUE;
}
int
main(int argc,
char **argv)
{
GtkBuilder *builder;
GtkWidget *window;
GtkWidget *image;
GError *error = NULL;
/* Init GTK+ */
gtk_init(&argc, &argv);
/* Create new GtkBuilder object */
builder = gtk_builder_new();
/* Load UI from file. If error occurs, report it and quit application.
* Replace "tut.<b style="color:black;background-color:#ffff66">glade</b>" with your saved project. */
if(! gtk_builder_add_from_file(builder, "tut_3.xml", &error))
{
g_warning("%s", error->message);
g_free(error);
return(1);
}
/* Get main window pointer from UI */
GtkImage image = GTK_WIDGET(gtk_builder_get_object(builder, "image1"));
/* Connect signals */
gtk_builder_connect_signals(builder, data->image);
/* Destroy builder, since we don't need it anymore */
g_object_unref(G_OBJECT(builder));
/* Show window. All other widgets are automatically shown by GtkBuilder */
gtk_widget_show(data->window);
/* Start main loop */
gtk_main();
return(0);
}
파일 속성을 설정하는 것은 gtk_image_set_from_file과 동일한 __the입니다. http://git.gnome.org/cgit/gtk+/tree/gtk/gtkimage.c#n340 – ntd