2013-02-07 38 views
0

我將gWidgets中的GUI移植到RGtk2。 gui的一部分是應該用於分析的文件列表。我希望能夠從這個列表中選擇文件並按下一個按鈕來刪除選定的文件。我剝離它的版本可以使用下面的代碼創建。如何根據gtkTreeView中的選擇刪除rGtkDataFrame中的一行

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

回答

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]) 
    }) 
相關問題