R 在gwidget中切换一组图标
我可以切换如下图标的显示:R 在gwidget中切换一组图标,r,icons,handler,gwidgets,R,Icons,Handler,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,...)
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)
reject必须从处理程序中的h$action
中检索index
值(index)我还意识到,在函数中更改的不是“svalue(icon[index]),而是“svalue(lyt[I,j]),其中action=list(ind,I,j)。但是,当我单击一个图标时,我得到了错误“Gtk CRITICAL**:Gtk_table_attach:assertion`child->parent==NULL”失败”我认为这只是一个警告,不是一个错误。您可能只需要对对象使用h$obj
,当h$obj
通过信号接收器时,您不需要通过全局索引进行查找。是的,对对象使用h$obj解决了问题。我非常感谢您的帮助。
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)
}
}