3

私は彼を一日中働かせようとしてきましたが、これがどのように機能するかについての簡単な説明を見つけることができません。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ウィンドウ内の別の行にあるチェックボックスをどのように取得しますか。次に、最初のコードの機能をループに組み込むにはどうすればよいですか?(問題は、入力の数がスクリプトの実行ごとに異なることです)

4

1 に答える 1

2

を使用できます[。?ggwidget を参照してください

「[」メソッドは、ボックスのラベルを返します。

次に、ハンドラー関数を変更します。

 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
            })
}
于 2013-01-07T18:27:22.603 に答える