使用tcltk在R脚本中添加弹出文本框

时间:2012-07-03 13:15:50

标签: r tk

我有一个很长的脚本来做一些数据分析,它必须连接到几个数据库。其中一个数据库往往比我更频繁地更新我的密码,所以我想为我添加一个弹出框来输入我当前的密码。我找到了这个例子,但是当对话框被解除时,不明白tcltk看到hwo返回我的值。我想过将它定义为OnOK函数中的全局变量(<<-),但这看起来很乱

require(tcltk)
tt<-tktoplevel()
Name <- tclVar("Password")
entry.Name <-tkentry(tt,width="20",textvariable=Name)
tkgrid(tklabel(tt,text="Enter Password"))
tkgrid(entry.Name)
OnOK <- function()
{
    NameVal <- tclvalue(Name)
    tkdestroy(tt)
}
OK.but <-tkbutton(tt,text="   OK   ",command=OnOK)
tkbind(entry.Name, "<Return>",OnOK)
tkgrid(OK.but)
tkfocus(tt)

3 个答案:

答案 0 :(得分:4)

你回答了自己的问题:你确实在这些tcltk例子中需要<<- ---看看Peter多年来的各种帖子,或其他漂浮的例子,其他CRAN包使用,甚至是包装本身。尝试

  library(tcltk)
  demo("tkcanvas")

并查看它如何对待,例如lastXlastY

答案 1 :(得分:4)

您可能会发现ginput gWidgets函数包含了Greg Snow为您推荐的内容:

require(gWidgets)
options(guiToolkit="tcltk") 
NameVal <- ginput("Enter your passsword:")
如果您取消,

NameVal将包含输入的字符串或NA

答案 2 :(得分:1)

您可以使用tkwait.windowtkwait.variable功能。使用上面的代码弹出窗口,然后使用其中一个等待函数(tkwait.window将停止脚本继续进行,直到窗口被销毁,基本上当你单击OK时)。然后当脚本继续运行时,您将在脚本/函数中的变量中获得您的值,并且可以在那里使用它而无需分配全局变量。