我正在将一个 GUI 从 gWidgets 移植到 RGtk2。gui 的一部分是应该用于分析的文件列表。我希望能够从此列表中选择文件并按下一个按钮来删除选定的文件。我可以使用以下代码创建它的剥离版本。
当 setMode 设置为“多个”时,当我运行 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()