我有一个很长的脚本来做一些数据分析,它必须连接到几个数据库。其中一个数据库往往比我更频繁地更新我的密码,所以我想为我添加一个弹出框来输入我当前的密码。我找到了这个例子,但是当对话框被解除时,不明白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)
答案 0 :(得分:4)
你回答了自己的问题:你确实在这些tcltk例子中需要<<-
---看看Peter多年来的各种帖子,或其他漂浮的例子,其他CRAN包使用,甚至是包装本身。尝试
library(tcltk)
demo("tkcanvas")
并查看它如何对待,例如lastX
,lastY
。
答案 1 :(得分:4)
您可能会发现ginput
gWidgets
函数包含了Greg Snow为您推荐的内容:
require(gWidgets)
options(guiToolkit="tcltk")
NameVal <- ginput("Enter your passsword:")
如果您取消, NameVal
将包含输入的字符串或NA
。
答案 2 :(得分:1)
您可以使用tkwait.window
或tkwait.variable
功能。使用上面的代码弹出窗口,然后使用其中一个等待函数(tkwait.window
将停止脚本继续进行,直到窗口被销毁,基本上当你单击OK时)。然后当脚本继续运行时,您将在脚本/函数中的变量中获得您的值,并且可以在那里使用它而无需分配全局变量。