gpt4 book ai didi

r - 使用 tcltk 单选按钮时如何停止 R?

转载 作者:行者123 更新时间:2023-12-04 10:51:14 27 4
gpt4 key购买 nike

我在这里使用了代码:http://www.sciviews.org/_rgui/tcltk/Radiobuttons.html向用户提问。

但 R 不会等待用户响应 - 代码会继续运行,因此任何尝试使用响应的后续代码都将丢失。

这是我的完整代码,我想存储 testVal(这是答案)。

require(tcltk)
tt <- tktoplevel()
rb1 <- tkradiobutton(tt)
rb2 <- tkradiobutton(tt)
rb3 <- tkradiobutton(tt)
rb4 <- tkradiobutton(tt)
rb5 <- tkradiobutton(tt)
rbValue <- tclVar(NA)
tkconfigure(rb1,variable=rbValue,value=1)
tkconfigure(rb2,variable=rbValue,value=2)
tkconfigure(rb3,variable=rbValue,value=3)
tkconfigure(rb4,variable=rbValue,value=4)
tkconfigure(rb5,variable=rbValue,value=5)

tkgrid(tklabel(tt,text="What's your answer?"))
tkgrid(tklabel(tt,text="1"),rb1)
tkgrid(tklabel(tt,text="2"),rb2)
tkgrid(tklabel(tt,text="3"),rb3)
tkgrid(tklabel(tt,text="4"),rb4)
tkgrid(tklabel(tt,text="5"),rb5)


testVal <- NA

OnOK <- function()
{
rbVal <- tclvalue(rbValue)
tkdestroy(tt)
testVal <<- rbVal
print(rbVal)
#return(rbVal)
}
OK.but <- tkbutton(tt,text="OK",command=OnOK)
tkgrid(OK.but)
tkfocus(tt)

cat(testVal)

最佳答案

您可以创建一个对象done,它是一个 tcl 变量,并使用函数 tkwait.variable 告诉 R 等待继续,直到该变量更改值。

然后在您的函数 OnOK 中加入一行,更改 done 的值。所以,

## New object 'done'
done <- tclVar(0)

OnOK <- function()
{
rbVal <- tclvalue(rbValue)
tkdestroy(tt)
testVal <<- rbVal
## When OK button is pressed, value of 'done' is changed
tclvalue(done) <- 1
print(rbVal)
#return(rbVal)
}
OK.but <- tkbutton(tt,text="OK",command=OnOK)
tkgrid(OK.but)
tkfocus(tt)

## Tell R to wait for change in value of 'done'
tkwait.variable(done)

cat(testVal)

关于r - 使用 tcltk 单选按钮时如何停止 R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425916/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com