Member 13376650 Ответов: 1

(Gtk:4783): gtk-критический **: gtk_image_set_from_pixbuf: утверждение 'GTK_IS_IMAGE (image)' не удалось


Это мой код.:

#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>

void destroy(void) {
  gtk_main_quit();
}


int main()
{
    GdkPixbuf* buf;
    GdkPixbuf* buf2;
    GError* err = NULL;
    int a=0, i=0, j=0;

    GtkWidget* window;
    GtkWidget *image =0;


    gtk_init (NULL,NULL);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    buf = gdk_pixbuf_new_from_file("1.jpg", &err);
    buf2 = gdk_pixbuf_new_from_file("2.jpg", &err);


   for(i=0; i<10; i++)
   {


         if((i%2)==0)
     {

       gtk_image_set_from_pixbuf(GTK_IMAGE(image), buf);

            for(j=0; j<10000; j++)
            {}
          }else
          {

         gtk_image_set_from_pixbuf(GTK_IMAGE(image), buf2);
            for(j=0; j<10000; j++)
            {}
    }

  g_signal_connect(G_OBJECT (window), "destroy",
  G_CALLBACK (destroy), NULL);
  gtk_container_add(GTK_CONTAINER (window), image);
  gtk_widget_show_all(window);
  gtk_main();

    }

return 0;
}



И вот результат:
(gtk:4783): Gtk-CRITICAL **: gtk_image_set_from_pixbuf: assertion 'GTK_IS_IMAGE (image)' failed

(gtk:4783): Gtk-CRITICAL **: gtk_container_add: assertion 'GTK_IS_WIDGET (widget)' failed
^C


Что я уже пробовал:

То, что я пытаюсь сделать, это : у меня есть 2 изображения и цикл, который я хочу показать одно изображение для нечетных чисел и другое изображение для четных чисел. Но эта простая задача кажется очень трудной для выполнения! пожалуйста, помогите мне исправить мой код...спасибо!

Richard MacCutchan

Где происходит это сообщение и каковы параметры, которые его вызывают?

1 Ответов

Рейтинг:
4

Jochen Arndt

Я до сих пор не использовал GDK, но ошибки вполне понятны.

Оба они получены вашим image существование NULL Вы должны создать новый пустой файл . GtkImage виджет первый:

image = gtk_image_new();


Обратите также внимание, что вы должны проверить, была ли загрузка из файлов успешной:
buf = gdk_pixbuf_new_from_file("1.jpg", &err);
if (NULL == buf)
{
    fprintf(stderr, "Loading image 1 failed with error %s\n", err->message);
    return 1;
}
buf2 = gdk_pixbuf_new_from_file("2.jpg", &err);
if (NULL == buf2)
{
    fprintf(stderr, "Loading image 2 failed with error %s\n", err->message);
    return 1;
}
Вы не указали полный путь к файлам изображений. Затем используется текущий рабочий каталог. Если он не содержит файлов изображений, загрузка завершится неудачно.