R tcl tk:如何将变量传递给按钮命令?

gai*_*tat 2 tk-toolkit r tcl

我如何传递num按钮的命令功能的值?

f.frame <- tktoplevel()

numIDs = 50;
bs = list();
OnPress <- function (inum) { print (inum) }
for (num in 1:numIDs) {
    bs[[num]] <- tkbutton (f.frame, command = "OnPress num");
    tkpack (bs[[num]]);
}
Run Code Online (Sandbox Code Playgroud)

Spa*_*man 5

创建一个返回无参数函数的工厂函数:

makepresser=function(n){force(n);function(){cat("Hit me ",n," times\n")}}
Run Code Online (Sandbox Code Playgroud)

如果您以前没有看过这个,它可以让您:

> m1 = makepresser(1)
> m1()
Hit me  1  times
> m2 = makepresser(9)
> m2()
Hit me  9  times
Run Code Online (Sandbox Code Playgroud)

那么简单如下:

f.frame <- tktoplevel()
bs = list()
for(i in 1:10){
   bs[[i]]=tkbutton(f.frame,command=makepresser(i))
   tkpack(bs[[i]])
}
Run Code Online (Sandbox Code Playgroud)

工厂函数创建一个没有参数的函数闭包,它保持n构造时的值(force此处需要该函数或者您通过延迟评估被咬过).