Позволяет ли пользователю выбрать несколько значений из списка с помощью RGtk2 в R? - PullRequest
0 голосов
/ 28 июня 2019

Я создаю довольно простой графический интерфейс в R, который создает фигуры различного анализа данных на основе значений, выбранных пользователем. У меня возникают проблемы с выяснением, как разрешить пользователю выбирать несколько значений из списка. Метод, над которым я работаю, ниже. Проблемная область находится в операторе if, где мне нужно поместить выбор пользователя в список.

CallSpecies<-function(options){
  dialog<-gtkMessageDialog(NULL,0,"question","ok-cancel","Choose a species",show=FALSE)
  sppmodel<-rGtkDataFrame(Species)

  sppview<-gtkTreeView(sppmodel)

  sppview$getSelection()$setMode("multiple")

  column<-gtkTreeViewColumn("Species Code",gtkCellRendererText(),text=0)

  column1<-gtkTreeViewColumn("Common Name",gtkCellRendererText(),text=1)

  sppview$appendColumn(column)

  sppview$appendColumn(column1)

  scrolled_window<-gtkScrolledWindow()
  scrolled_window$setSizeRequest(-1,150)
  scrolled_window$add(sppview)

  dialog[["vbox"]]$add(scrolled_window)

  if (dialog$run()==GtkResponseType["ok"]){

  }
  dialog$destroy()

}

1 Ответ

0 голосов
/ 01 июля 2019

В итоге я решил собственную проблему, прочитав документацию с других языков и переведя ее на синтаксис R. Я отредактировал код, чтобы показать свое решение. Я ни в коем случае не эксперт в R или GTK, но это, кажется, работает.

CallSpecies<-function(options){

  dialog<-gtkMessageDialog(NULL,0,"question","ok-cancel","Choose a species. Hold control and click to select multiple species.",show=FALSE)

  sppmodel<-rGtkDataFrame(Species)

  sppview<-gtkTreeView(sppmodel)

  sppview$getSelection()$setMode("multiple")

  column<-gtkTreeViewColumn("Species Code",gtkCellRendererText(),text=0)

  column1<-gtkTreeViewColumn("Common Name",gtkCellRendererText(),text=1)

  sppview$appendColumn(column)

  sppview$appendColumn(column1)

  scrolled_window<-gtkScrolledWindow()
  scrolled_window$setSizeRequest(-1,150)
  scrolled_window$add(sppview)

  dialog[["vbox"]]$add(scrolled_window)

  spplist<-c()

  if (dialog$run()==GtkResponseType["ok"]){
    selection<-sppview$getSelection()
    sel_paths<-selection$getSelectedRows()$retval
    i=1
    for (p in sel_paths){
      sel_row<-sel_paths[[i]]$getIndices()[[1]]
      sel_row<-sel_row+1
      elem<-Species[sel_row,"SpeciesCode"]
      elem<-as.character(elem)
      spplist<-c(spplist,elem)
      i<-i+1
    }
    print("spplist")
    print(spplist)
  }
  dialog$destroy()

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...