GTK&x2B;和GdkPixbuf

GTK&x2B;和GdkPixbuf,gtk,Gtk,我想我对GTK有一个理解问题。我的简单应用程序有一个图像流,我想在我的GTK窗口中显示它们。到目前为止,它看起来是这样的: GdkPixbuf *pb = gdk_pixbuf_new_from_data(img2, GDK_COLORSPACE_RGB, FALSE, 24/3, 320, 240, 320*3, NULL, NULL); if(pb == NULL) fprintf(stderr,

我想我对GTK有一个理解问题。我的简单应用程序有一个图像流,我想在我的GTK窗口中显示它们。到目前为止,它看起来是这样的:

GdkPixbuf *pb = gdk_pixbuf_new_from_data(img2, GDK_COLORSPACE_RGB, 
                     FALSE, 24/3, 320, 240, 320*3,
                     NULL, NULL);
if(pb == NULL)
    fprintf(stderr, "Pixbuf is null!\n");

if(image != NULL)
    gtk_container_remove(GTK_CONTAINER(window), image);
image = gtk_image_new_from_pixbuf(pb);
gtk_container_add(GTK_CONTAINER(window), image);

printf("Updated!\n");
img2是我的(rgb)缓冲区,每次从流中更新。我猜gtk\u容器\u移除gtk\u容器\u添加用于此可能很愚蠢

以下是我的补充:

GtkWidget *window;
GtkWidget *image;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_signal_connect(GTK_OBJECT(window), "destroy",
           GTK_SIGNAL_FUNC(destroy), NULL);

    /* ... */
    start_routine_for_stream_that_calls_the_above(...)
    /* ... */

gtk_widget_show_all(window);
gtk_main();
我的问题是它不是这样工作的。。。要么我只看到最后一个GdkPixbuf图像,要么我什么也看不到,这是正确的行为

但是我如何管理它来显示(流)更新的GdkPixbuf呢


感谢您的帮助

更改图像时,您需要运行主循环。例如,您可以执行
gtk_main()
并使用
g_timeout\u add()
来安排回调,使其每秒运行一次,并替换回调中的图像。

啊,好的,谢谢,我会看一看。。您对gtk_容器的删除和添加有何看法?这是正确的方法吗?@Daniel:但是,在pixbuf()函数中有
gtk\u image\u set\u。重用相同的
GtkImage
应该更容易。