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