5

我有一个很长的脚本来做一些数据分析,它必须连接到几个数据库。其中一个数据库往往比我喜欢的更频繁地更新我的密码,所以我想添加一个弹出框让我输入我当前的密码。我找到了这个例子,但对 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)
4

3 回答 3

4

您回答了您自己的问题:实际上您确实需要<<-这些 tcltk 示例 --- 请参阅 Peter 多年来的各种帖子,或其他浮动示例,其他 CRAN 包使用,甚至包本身。尝试

  library(tcltk)
  demo("tkcanvas")

看看它是如何处理的,例如lastX, lastY

于 2012-07-03T13:27:36.213 回答
4

您可能会发现总结 Greg Snow 为您建议的ginput功能:gWidgets

require(gWidgets)
options(guiToolkit="tcltk") 
NameVal <- ginput("Enter your passsword:")

NameVal将包含输入的字符串,或者NA如果您取消。

于 2012-07-04T13:15:13.277 回答
1

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

于 2012-07-03T17:22:40.957 回答