我想在用戶單擊一個buttion時更改GtkImage上的圖像,所以我嘗試了下面的代碼,但它不起作用。如何更改應用程序運行時GtkImage的「文件」屬性
/*
* 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);
}
設置''file''屬性與'gtk_image_set_from_file'相同___。 http://git.gnome.org/cgit/gtk+/tree/gtk/gtkimage.c#n340 – ntd 2009-10-27 19:50:56