2010-05-01 39 views
1

我想我已經理解了GTK的問題。我的簡單應用程序有一串圖像,我想在我的GTK窗口中顯示它們。截至目前,它看起來像這樣:GTK +和GdkPixbuf

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_container_removegtk_container_add可能是愚蠢的用於此?

這是我除了得:

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

感謝您的幫助

回答

3

您需要在更改圖像時運行主循環。例如,您可以執行gtk_main()並使用g_timeout_add()來安排您的回調,以便每秒運行一次,並在該回調中替換圖像。

+0

啊好的,thx,我會看看它..你對gtk_container_remove和gtk_container_add有什麼看法?這是一個合適的方式嗎? – Daniel 2010-05-01 14:37:49

+0

@丹尼爾:是的,看起來對我很正確。 – doublep 2010-05-01 14:39:47

+0

很酷,謝謝:) – Daniel 2010-05-01 14:41:28