В настоящее время у меня есть программа, которая меняет изображение в окне gtk. Когда мой код меняет изображение, изменение появляется на изображении, как только я фокусируюсь на окне (т.е. нажмите, измените размер и т. Д.). Я бы хотел, чтобы он обновлялся без необходимости фокусироваться на окне, потому что у меня есть входные данные пользователя в терминал при изменении изображения (например, классификация субимажей). Таким образом, нужно постоянно щелкнуть вперед и назад, это неприятность.C - 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
Вот как я называю обновления экрана Red RS (* this-> р); Merge 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;
Как вы называете 'refresh'? – KoKuToru
Я отправил код, который вызывает функцию обновления. Кстати, это C++. Refresh вызывается в основном потоке, тогда как, как показано, main gtk запускается в отдельном потоке –
Я думаю, что это может иметь какое-то отношение к потоку gtk_main(), который не работает, когда окно находится в фоновом режиме –