0

GUIをgWidgetsからRGtk2に移植しています。GUIの一部は、分析に使用する必要のあるファイルのリストです。このリストからファイルを選択し、選択したファイルを削除するためのボタンを表示できるようにしたいと思います。私はそれのストリップバージョンを次のコードで作成することができます。

setModeが'multiple'に設定されている場合、getSelectedRowsを実行すると、選択した行へのパスのリストが表示されます。これをTreeModelからこれらの行を削除する方法に変換する方法に固執しています。TreeModelの行または列を直接削除することはできないことを理解しているので、データを抽出し、選択した行を削除してから、rGtkDataFrameを新しいデータで更新する必要がありますか?

どんな助けでもありがたいです...

ベスト/トーマス

filelist <- rGtkDataFrame(data.frame(Datafiles=character(), stringsAsFactors=FALSE))
mainWindow <- gtkWindow(show=FALSE)
datafileSelect <- gtkHBox(FALSE, 5)
mainWindow$add(datafileSelect)
files <- gtkTreeView(filelist)
files$insertColumnWithAttributes(position=-1, title='MS datafiles', cell=gtkCellRendererText(), text=0)
files$setHeadersVisible(FALSE)
fileSelect <- files$getSelection()
fileSelect$setMode('multiple')
datafileSelect$packStart(files)
datafileSelectButtons <- gtkVBox(FALSE, 5)
datafileSelect$packStart(datafileSelectButtons, expand=FALSE, fill=FALSE)
fileAddButton <- gtkButton(label='Add')
gSignalConnect(fileAddButton, 'clicked', f=function(widget, ...){
    file <- gtkFileChooserDialog(title='Select MS datafiles', parent=mainWindow, action='open', 'gtk-ok', GtkResponseType['ok'], 'gtk-cancel', GtkResponseType['cancel'], show=FALSE)
    file['select-multiple'] <- TRUE
    gSignalConnect(file, 'response', f=function(dialog, response, data){
        if(response == GtkResponseType['ok']){
          files <- as.character(dialog$getFilenames())
          filelist$appendRows(data.frame(Datafiles=files, stringsAsFactors=FALSE))
          setwd(dirname(files[1]))
        }
        dialog$destroy()
        })
    file$show()
    })
fileRemoveButton <- gtkButton(label='Remove')
gSignalConnect(fileRemoveButton, 'clicked', f=function(widget, ...){
    selected <- fileSelect$getSelectedRows()
    })
datafileSelectButtons$packStart(fileAddButton, expand=FALSE, fill=FALSE)
datafileSelectButtons$packStart(fileRemoveButton, expand=FALSE, fill=FALSE)
mainWindow$setDefaultSize(250, 300)
mainWindow$show()
4

1 に答える 1

0

気にしないで - 分かった...

gtkTreePathToString 関数は選択のインデックスを返し、rGtkDataFrame で TreeModel を更新するのは簡単な作業です。したがって、削除ボタンの gSignalConnect は次のようになります。

gSignalConnect(fileRemoveButton, 'clicked', f=function(widget, ...){
    selected <- sapply(fileSelect$getSelectedRows()$retval, function(x) as.numeric(x$toString())+1)
    filelist$setFrame(filelist[-selected, , drop=FALSE])
    })
于 2013-02-07T12:45:27.870 に答える