r-如何根据gtkTreeView中的选择删除rGtkDataFrame中的行



我正在将一个GUI从gWidgets移植到RGtk2。gui的一部分是应该用于分析的文件列表。我希望能够从这个列表中选择文件,然后按下按钮删除所选文件。我剥离了它的版本,可以用下面的代码创建。

当setMode设置为"multiple"时,当我运行getSelectedRows时,我会得到所选行的路径列表。我一直纠结于如何将其转换为从TreeModel中删除这些行的方法。据我所知,删除TreeModel中的行或列是不可能的,所以我必须提取数据,删除选定的行,然后用新数据更新rGtkDataFrame?

任何帮助都将不胜感激。。。

最好的/Thomas

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()

Nevermind-我想明白了。。。

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])
    })

相关内容

  • 没有找到相关文章