Tcl configure -background按钮失败

时间:2014-01-23 13:35:03

标签: button tcl tk

我有以下proc,它根据输入框中的当前路径是否存在来更改选择文件按钮的颜色。第一个if循环工作,第二个我得到"无效命令名""执行" $ Button configure -background red"而且我不知道为什么......

proc ::CheckGUIPaths {  } {

set FilePathList [list $::GUI_DB_path $::GUI_BDF_path $::GUI_ALLOW_path $::GUI_EXCEL_path $::GUI_HM_path]
set Buttons [list .dsm.nb.f1.btn_DBfile .dsm.nb.f1.btn_BDFfile .dsm.nb.f1.btn_ALLOWfile .dsm.nb.f1.btn_HMfile .dsm.nb.f1.btn_XLfile]

for { set n 0 } { $n <= 5 } { incr n }  {

   set Path [lindex $FilePathList $n]
   set Button [lindex $Buttons $n]

   if { [ file exists $Path ] == 1 } {  
        $Button configure -background  green 
      }      
   if { [ file exists $Path ] == 0 } {  
        $Button configure -background  red
      }   
   }
return 0

}

2 个答案:

答案 0 :(得分:2)

你应该能够用这个结构替换循环:

foreach Path $FilePathList Button $Buttons {
    if {[file exists $Path]} {
        $Button configure -background green
    } else {
        $Button configure -background green
    }
}

以这种方式书写意味着您不需要跟踪项目数量。但是,如果任何列表的项目数应该比另一个更多,则另一个迭代变量将获得匹配的空值。

答案 1 :(得分:1)

这些列表中只有5个元素,但循环迭代6次。您可能需要{$n < 5}{$n < [llength $FilePathList]}


关于风格/效率的说明:您不需要测试两次存在

if {[ file exists $Path ]} {  
    $Button configure -background  green 
} else {  
    $Button configure -background  red
}

$Button configure -background [expr {[ file exists $Path ] ? "green" : "red"}]