2013-05-30 45 views
5

这可能很简单,当答案回来时我会畏缩,但是我完全被困住了。我已经尝试过这些手册,尝试搜索网页,各种各样的例子以及任何我能想到的东西。我仍然坚持。从tcltk函数中获取数据

我想创建一个简单的输入为用户添加两个值,然后我可以在其余的R脚本中使用。我需要脚本暂停并等待用户的输入,然后一旦获得输入就继续(例如选择文件功能如何工作)。在阅读一堆东西之后,我决定使用库(tcltk)。我有一个功能很好的小盒子。

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    print(x) 
    print(y) 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    } 

当我键入:

inputs() 

的可爱的小框弹出,我可以输入我的价值观,比如说3和4的这个例子。

我回来

<Tcl> 
[1] 3 
[1] 4 

我想用在R代码的后续部分的数量。我如何得到它们,这样我就可以得到相同的结果?

input1 <- 3 
input2 <- 4 

在此先感谢您的帮助。

回答

7

这里是你的函数的修改:

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    e <- parent.env(environment()) 
    e$x <- x 
    e$y <- y 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    tkwait.window(tt) 
    return(c(x,y)) 
} 

现在运行的功能等:

myvals <- inputs() 

现在输入您2倍的值,然后点击“提交”,然后看myvals变量,它包含你的2个值。

+0

哦完美!解决了我的问题。谢谢!!! –

1

你有他们在提交回调 - 你只需要把它们放在某个地方。有时全局变量对此最好。只需使用< < - 分配给它们,以便绑定发生在提交回调的范围之外。您也可以为此目的使用环境,甚至可以使用参考类。

+1

哦......你能解释一下吗?我该如何做“提交回调”,我该如何使用<< - –