Как вернуть значение из функции в gwidgets

У меня есть следующий код для выбора каталогов входных и выходных папок.

require(gWidgets2RGtk2)

input=NULL
win = gwindow("Stage 1")
g = ggroup(horizontal=FALSE,cont=win)
  g1=ggroup(cont=g)
    svalue(input)<-gbutton("Input folder",cont=g1,expand=TRUE,handler=function(...) {
      input=gfile(type="selectdir")
      gmessage(paste0("Input directory set to ",input))
      input
    })
g2=ggroup(cont=g)
    gbutton("Ouput folder",cont=g2,expand=TRUE,handler=function(...) {
      output=gfile(type="selectdir")
      gmessage(paste0("Output directory set to ",output))
    })

Однако при запуске код не возвращает каталоги папок ввода и вывода. Может кто-нибудь показать мне, что я здесь делаю не так?

1 ответ

Решение

Чтобы уточнить мой комментарий, вот пример, использующий как среду, так и <<-

require(gWidgets2)
options(guiToolkit="RGtk2")

input <- NULL                           # global
e <- new.env()                          # environment

win = gwindow("Stage 1")
g = ggroup(horizontal=FALSE,cont=win)

gbutton("Input folder",cont=g,handler=function(...) {
  value <- gfile(type="selectdir")
  gmessage(paste0("Input directory set to ",value))
  ## assign via <<-
  input <<- value
  ## assign to an environment
  e$input <- value
})

gbutton("What is stored?", cont=g, handler=function(...) {
  print(sprintf("The global variable has %s", input))
  print(sprintf("The environment stores %s", e$input))
})
Другие вопросы по тегам