如何将proc作为变量名附加到循环创建的按钮

时间:2016-02-22 08:25:12

标签: tcl tk

帮助我解决我的一个问题,我抓住了我的想法继续前进。 我在foreach循环中创建了一个radiobutton。也希望每个这些按钮都有一个不同的命令选项,因为我不确定将创建多少个按钮(它总是动态的)我把它放在foreach循环中。

此外,我将proc作为变量附加,因此每当单击这些单选按钮时,proc的函数体将执行,但此代码无法正常运行并在选择单选按钮时抛出错误。 我认为变量$ elem和$ w没有传递给proc

proc check_lib_name {} {
   global ENTRYfilename5 ENTRYfilename f mylist elem w
   cd $ENTRYfilename
   set dirnames [glob -type d *]
   set b 7
   set mylist {}
   foreach f $dirnames {
      set r 2
      lappend mylist $f
   }

   set w 0
   foreach elem $mylist {
      radiobutton .top.d.$elem -text $elem -command $elem.$w -value $elem.abc
      grid .top.d.$elem -row $b -column $r -sticky nsew
      incr b
      incr w
   }

   #### Proc attached with radiobuttons
   proc $elem.$w {} {
      global ENTRYfilename5 ENTRYfilename elem w
      cd $elem
      set rrpath [glob -type d *]
      puts $rrpath
      set del "/"
      set klpath [concat [string trim $ENTRYfilename][string trim $del][string trim  $elem][string trim $del][string trim $rrpath]]
      puts $klpath
      cd $klpath
      exec [myRun.sh]
   }
}

1 个答案:

答案 0 :(得分:2)

在foreach循环运行之后,$elem$w的值将是它们的最后一个值,这也意味着您只创建了1个proc,这是最后一个单选按钮。 / p>

我认为为每个配给按钮制作1个proc是个好主意。使用带有参数的1个通用过程。

...
radiobutton .top.d.$elem -text $elem -command [list radiofunction $elem $w] -value $elem.abc
...

然后

proc radiofunction {elem w} {...}

radiofunction只是一个示例名称。