【问题标题】:Get data out of a tcltk function从 tcltk 函数中获取数据
【发布时间】:2013-05-30 23:43:08
【问题描述】:

这可能很简单,当答案回来时我会畏缩,但我完全被难住了。我尝试过手册,尝试搜索网络,各种示例以及我能想到的任何其他内容。我还是卡住了。

我正在尝试为用户创建一个简单的输入,以添加两个值,然后我可以在 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

提前感谢您的帮助。

【问题讨论】:

    标签: r tk


    【解决方案1】:

    这是对你的函数的修改:

    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 个值。

    【讨论】:

      【解决方案2】:

      您将它们放在提交回调中——您只需要将它们放在某个地方。有时全局变量最适合这个。只需使用

      【讨论】:

      • 哦...你能再解释一下吗?如何“提交回调”以及如何使用
      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 2011-10-19
      • 2017-08-02
      • 1970-01-01
      相关资源
      最近更新 更多