gtk在回调函数或者线程中更新主界面图像

⌚Time: 2022-11-12 15:56:29

👨‍💻Author: Jack Ge

在线程中刷新主界面

线程初始化


//线程初始化,要在gtk_init之前调用

if(!g_thread_supported()){

    g_thread_init(NULL);

    gdk_threads_init();

}

//初始化gtk

gtk_init(&argc,&argv);

在gtk_main函数处


gdk_threads_enter();

gtk_main(); 

gdk_threads_leave();

在线程中需要更新界面的地方


gdk_threads_enter();

...//界面更新语句

gdk_threads_leave();

最后编译链接时需要加的参数


-lgthread-2.0 -lglib-2.0 -lintl


在回调函数中刷新主界面的方法:

在gtk的回调函数中,是阻塞主界面操作的,也就是说,在回调函数中多次设置主界面控件文本是不会在主界面更新的,最后只能等待回调函数返回,主界面只显示最后一次设置的文本

通过


while(gtk_events_pending()){

    gtk_main_iteration();

}

调用gtk_main_iteration()函数对主循环进行迭代。检查是否有任何事件需要通过调用gtk_events_pending()函数处理。这两个函数将控制权临时交给主界面。实现界面的刷新显示。在密集计算中显示进度条,就可以通过这种方式让主界面刷新进度条进度