gpt4 book ai didi

r - gWidgetRGtk2 gcheckbox 列表加法/减法循环

转载 作者:行者123 更新时间:2023-12-04 10:08:18 25 4
gpt4 key购买 nike

我一整天都在努力让他工作,但我找不到关于其工作原理的简单解释。我有一个包含 3 个项目的向量,c(file1, file2, file3),我希望能够打开和关闭复选框,当它打开时我想要第一个项目 c( file1) 位于向量中,但是当它关​​闭时我希望将其从向量中删除。这是我的尝试,但我不知道为什么它不起作用:

library(gWidgetRGtk2)
GraphFiles <- FileNamesOrig

w <- gwindow("Tag Density Checkboxes")
g <- ggroup(container = w)
lyt <- glayout(cont = g, horizontal = T)

gcheckbox(FileNamesOrig[1], container=g, checked=TRUE, handler=function(h,...){
if(!svalue(h$obj)){GraphFiles[[1]] <- NA} else {GraphFiles[[1]] <-FileNamesOrig[1]}
})

虽然我们都在这里,但我正在考虑:

for(i in 1:No.file)
gcheckbox(GraphFiles[i], container=g, handler=function(h,...){
})

No.file = 3

首先,我如何在 GUI 窗口中将复选框放在单独的一行上。其次,我如何将第一段代码的功能合并到循环中? (问题是每次运行脚本时输入的数量都会不同)

最佳答案

你可以使用[,见?ggwidget

The "[" method returns the label on the box.

然后我改变你的处理函数:

 handler=function(h,...){  
browser()
label <- h$obj[]
if(!svalue(h$obj)) ## I remove the item
GraphFiles <<- GraphFiles[GraphFiles!=label] ## note the use of the global
operator
else ## I add the item
GraphFiles <<- c(GraphFiles,FileNamesOrig[FileNamesOrig==label])

})

最后你在循环中调用它:

library(gWidgetsRGtk2)
FileNamesOrig <- paste('file',1:3,sep='')
GraphFiles <- FileNamesOrig
w <- gwindow("Tag Density Checkboxes")
g <- ggroup(container = w)
lyt <- glayout(cont = g, horizontal = T)
for(x in seq_along(FileNamesOrig)){
gcheckbox(FileNamesOrig[x],
container=g,
checked=TRUE,
handler=function(h,...){
label <- h$obj[]
if(!svalue(h$obj)) GraphFiles <<- GraphFiles[GraphFiles!=label]
else GraphFiles <<- c(GraphFiles,FileNamesOrig[FileNamesOrig==label])
print(GraphFiles) ## edit to show the changes
})
}

关于r - gWidgetRGtk2 gcheckbox 列表加法/减法循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14200890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com