Я загружаю три изображения, когда я нажимаю на среднее изображение, оно скрывается, а через несколько секунд заменяется другим. Проблема в том, что в то же время изображения на внешней стороне собираются вместе, пока изображение не будет показано снова. Я бы хотел, чтобы они всегда отображались на отдельных полях и не имели никакого эффекта движения.
Это то, что я попробовал
#include <gtk/gtk.h>
static void destroy (GtkWidget*, gpointer);
static gboolean delete_event (GtkWidget*, GdkEvent*, gpointer);
void image_clicked();
gboolean show_image ();
GtkWidget *image[3];
int main (int argc,
char *argv[])
{
GtkWidget *window, *hbox, *event_box;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 35);
event_box = gtk_event_box_new ();
gtk_window_set_title (GTK_WINDOW (window), "Hello World!");
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
gtk_widget_set_size_request (window, 200, 100);
image[0] = gtk_image_new_from_file ("1.png");
image[1] = gtk_image_new_from_file ("2.png");
image[2] = gtk_image_new_from_file ("3.png");
gtk_container_add(GTK_CONTAINER (window), hbox);
gtk_container_add(GTK_CONTAINER (hbox), image[0]);
gtk_container_add(GTK_CONTAINER (hbox), event_box);
gtk_container_add(GTK_CONTAINER (event_box), image[1]);
gtk_container_add(GTK_CONTAINER (hbox), image[2]);
/* Connect the main window to the destroy and delete-event signals. */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
g_signal_connect (G_OBJECT (event_box), "button_press_event", G_CALLBACK (image_clicked), NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
void image_clicked() {
gtk_widget_hide(image[1]);
gtk_image_set_from_file (GTK_IMAGE((image[1])), "4.png");
g_timeout_add(3000, (GSourceFunc)show_image, NULL);
}
gboolean show_image () {
gtk_widget_show(image[1]);
return FALSE;
}
/* Stop the GTK+ main loop function when the window is destroyed. */
static void
destroy (GtkWidget *window,
gpointer data)
{
gtk_main_quit ();
}
/* Return FALSE to destroy the widget. By returning TRUE, you can cancel
* a delete-event. This can be used to confirm quitting the application. */
static gboolean
delete_event (GtkWidget *window,
GdkEvent *event,
gpointer data)
{
return FALSE;
}