2014-01-14 7 views
4

У меня есть следующий код для выбора каталогов входных и выходных папок.Как вернуть значение из функции в 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)) 
    }) 

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

+0

обработчики вызываются асинхронно, так что они на самом деле не имеют значимые возвращаемые значения. Скорее вы должны назначить значение переменной внутри тела функции. Это соответствие должно происходить вне сферы действия обработчика, так что это делается через среду, '<< -' или 'assign' – jverzani

ответ

5

Выработать на мой комментарий, здесь приведен пример использования как среду и <<-

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)) 
}) 
+0

Это именно то, что мне нужно было сделать, чтобы моя работа с графическим интерфейсом – CaffeineConnoisseur

Смежные вопросы