我目前有一个程序正在更改gtk窗口中的图像。当我的代码更改图像时,只要我专注于窗口(即单击,调整大小等),更改就会出现在图像中。我希望它更新而用户不必专注于窗口,因为我正在改变图像时将用户输入数据输入终端(即子图像的分类)。因此不得不经常来回点击是一件麻烦事。
我让窗口处理程序在一个单独的线程中运行。
这是我的代码
static void* gtkStarter(void * a) {
gtk_main();
return NULL;
}
void PixelImage::show() {
gtk_widget_show_all(this->window);
pthread_create(&this->pp, NULL, gtkStarter, NULL);
}
void PixelImage::close() {
gtk_widget_hide(this->window);
gtk_main_quit();
pthread_join(this->pp, NULL);
}
void PixelImage::refresh() {
gtk_widget_show(this->image);
}
我试过打电话:
gtk_widget_show
gtk_widget_grab_focus
gtk_widget_realize
以下是我如何调用refresh 红色rs(* this-> p); 合并mm;
PntPxlVector *ppv = this->p->mapReduce(pp, this->radius,
this->thick + this->radius,
rs, mm); // Gets points for drawing a circle
for (PntPxlVector::iterator itr = ppv->begin();
itr != ppv->end();
itr++) { // Draws the circle and stores previous pixel values
Pixel tmp = this->pi->get(itr->first);
this->pi->set(itr->first, itr->second);
itr->second = tmp;
}
this->pi->refresh(); // Refresh for circle display
feature f = this->prompt("Label? "); // Give a class label to the pixels in the circle
for (PntPxlVector::iterator itr = ppv->begin();
itr != ppv->end();
itr++) { // Reset the pixels to their original colors
this->pi->set(itr->first, itr->second);
}
this->pi->refresh(); // Refresh for correct display
delete ppv; // clean up memory
return f;
答案 0 :(得分:0)
我不知道gtk图像,但我自己使用gtk_widget_queue_draw(GtkWidget *widget)
来刷新开罗图像,它也适用于你的情况。