2015-05-21 2 views
0

Адаптация an example Я могу включить отображение значка, как это:переключая группу иконок в gWidgets

reject <- "D:/Pictures/web/close32.png" 
accept <- "D:/Pictures/web/open32.png" 
w= gwindow() 
g1 <- ggroup(horizontal=TRUE, cont=w) 
icon <- gimage(reject,cont=g1) 
state <- FALSE # a global 
changeState <- function(h,...) { 
    if(state) { 
    svalue(icon) <- reject 
    } else { 
     svalue(icon) <- accept 
     } 
    state <<- !state 
} 
addHandlerClicked(icon, handler=changeState) 

Однако, я хотел бы получить эту работу с группой икон example 3x3 icon grouping http://cran.r-project.org/web/packages/gWidgets/vignettes/gWidgets.pdf так, что каждый значок может быть переключен, и я могу получить состояние значков в виде вектора. Целью является создание графического селектора для выбора пар наблюдений для проведения анализа. Вот моя попытка. Он отображается правильно, но не реагирует на клики, чтобы изменить состояние. Я признаю, что я сбиваю с толку, как действия обработчика и действия действуют сообща, и будут признательны за любые разъяснения и исправления для этого кода.

reject <- "D:/Pictures/web/close32.png" 
accept <- "D:/Pictures/web/open32.png" 
w= gwindow() 
g1 <- ggroup(horizontal=TRUE, cont=w) 
lyt <- glayout(cont=g1, spacing=10) 
icon <- rep(reject,times=9) 
state <- rep(FALSE, times=9) 

changeState <- function(h,...) { 
    if(state[index]) { 
    svalue(icon[index]) <- reject 
    } else { 
    svalue(icon[index]) <- accept 
    } 
    state[index] <<- !state[index] 
} 

for(i in 1:3){ 
    for(j in 1:3){ 
    ind <- (i-1) * 3 +j 
    lyt[i,j] <- gimage(icon[ind], cont=lyt) 
    addHandlerClicked(lyt[i,j], handler=changeState, action= index <-ind) 
    } 
} 

1 с: http://i.stack.imgur.com/4kbwK.png

ответ

0

Значение index должны быть извлечены из h$action в обработчике (index <- h$action). Кроме того, этот бит action=index <- ind должен быть только action=ind.

+0

Я также понял, что внутри функции это не значение «svalue (значок [index])», которое изменяется, оно должно быть «svalue (lyt [i, j])», где action = list (ind, i, к). Тем не менее, этот ALMOST работает, когда я нажимаю на значок. Я получаю сообщение об ошибке «Gtk-CRITICAL **: gtk_table_attach: assertion' child-> parent == NULL 'failed " – LenPearl

+0

Это просто предупреждение, которое я думаю, а не ошибка , Вероятно, вы должны просто использовать «h $ obj» для объекта, но вам не нужно искать по индексу из глобального как «h $ obj» в приемнике сигнала. – jverzani

+0

Да, с помощью h $ obj для объекта решена проблема. Я искренне ценю вашу помощь. – LenPearl