首页 > 解决方案 > 如何在gtk3中动态更改图像

问题描述

我创建显示未戴面具的人脸的gui,我在opencv(python)中创建表sqlte3并通过sqlite3将文件名发送到C现在我正在尝试在Gtk3中动态更改我的图像并且我使用Glade,我在sqlite3中有文件名,我需要从 sqlite3 获取文件名并连续显示和更改图像但是当我运行它时,它只显示最后一个文件名。

///////// gcc `pkg-config --cflags gtk+-3.0` -rdynamic -o test2 test2.c `pkg-config --libs gtk+-3.0` -lsqlite3 -std=c99

这是我的程序的功能

G_MODULE_EXPORT void add_image_cb(GtkButton *button)
{
    sqlite3 * db;
    char * sql;
    sqlite3_stmt * stmt;
    int nrecs;
    char * errmsg;
    int i;
    int row = 0;
    char jpeg[] = ".jpg";
    char name[30];

    sqlite3_open ("list.db", & db);
    sql = "SELECT name FROM name_list";

    sqlite3_prepare_v2(db, sql, strlen(sql)  , &stmt, NULL);

    while(1)
    {
        int s;

        s = sqlite3_step (stmt);
        if (s == SQLITE_ROW) {
            int bytes;
            const unsigned char * text;
            bytes = sqlite3_column_bytes (stmt, 0);
            text  = sqlite3_column_text (stmt, 0);
            
            strcpy(name,text);
            strcat(name,jpeg);
            printf ("Data of row %d is : %s\n",row,  name);
          
            if (next_image)
            {
                gtk_container_remove(GTK_CONTAINER(fixed1),pre_image);
            }
            //gtk_widget_hide(pre_image);
            next_image =gtk_image_new_from_file(name);
            gtk_widget_show(next_image);
            gtk_container_add(GTK_CONTAINER(fixed1),next_image);
        
            row++;
            //sleep(1);
        }
        else if (s == SQLITE_DONE) {
            break;
        }
        else {
            fprintf (stderr, "Failed.\n");
            exit (1);
        }   
    }  
} 

谢谢你的回复 :)

标签: csqlitegtk3glade

解决方案


推荐阅读