C - GTK图像刷新,无需用户聚焦

时间:2014-11-16 18:56:55

标签: c gtk

我目前有一个程序正在更改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;

1 个答案:

答案 0 :(得分:0)

我不知道gtk图像,但我自己使用gtk_widget_queue_draw(GtkWidget *widget)来刷新开罗图像,它也适用于你的情况。