for(int i =0;i<14;++i){
gtk_box_pack_start(GTK_BOX(MessagesBox),gtk_label_new("метка"),0,0,0);
gtk_widget_show_all(MainWindow);
sleep(1);
}
理论上,每次迭代后,应该显示一个更新的新窗口,但它仅在调用后显示gtk_main(),为什么会发生这种情况,如何动态添加新标签到屏幕?
for(int i =0;i<14;++i){
gtk_box_pack_start(GTK_BOX(MessagesBox),gtk_label_new("метка"),0,0,0);
gtk_widget_show_all(MainWindow);
sleep(1);
}
理论上,每次迭代后,应该显示一个更新的新窗口,但它仅在调用后显示gtk_main(),为什么会发生这种情况,如何动态添加新标签到屏幕?
你没有做对。只有在函数执行到达循环后才会显示该窗口。例如最多
g_main_loop。在其中处理不同的事件。为了向 MessageBox 添加新的小部件,必须有一些条件,例如用鼠标单击按钮。但是如果你真的想每秒添加label一次,那么就这样写。基于 xverizex 的回答,我意识到我需要创建一个单独的线程,所以我将简化答案:
也就是说,一个函数在单独的线程中执行,每秒都会在屏幕上放置铭文“标签”,当然,如果有多个单独的线程,则必须使用互斥锁,但这里是一个。