错误位图0未定义

时间:2015-11-19 05:12:48

标签: tcl tk

我的代码是检查某些文件中返回的值,我将回调附加到一个按钮,按下该按钮时应根据返回值向用户显示一个对话框。 但是当代码执行时,它会返回错误消息位图“0”未定义。

代码:

#!/usr/local/bin/wish

##set command "lmstat -a -c /tools/license/dat/cadence_orbit_3x.dat -f Liberate_MX_Client | grep issued | awk {{print $11}}"

set result [exec lmstat -a -c /tools/license/dat/cadence_orbit_3x.dat -f Liberate_LX_Server | grep issued | awk {{print $11}}]
puts $result
if {$result == 0} {
button .hello -text "License Check" -command {checkLic} -bg green 
} else  {
button .hello -text "License Check" -command {checkLic} -bg red 

}
proc checkLic {} {
set val [exec lmstat -a -c /tools/license/dat/cadence_orbit_3x.dat -f Liberate_MX_Client | grep issued | awk {{print $11}}]
puts $val
if {$val == 0} {
after 5000 {destroy .dialog2}
     tk_dialog .dialog2 "Liberate licenses available" info 0 OK

} else  {

after 5000 {destroy .dialog2}
     tk_dialog .dialog2 "No licenses available" info 0 OK
}
}

pack .hello -padx 20 -pady 10

1 个答案:

答案 0 :(得分:1)

manual page for tk_dialog说:

  

tk_dialog 窗口标题文本位图默认字符串字符串...

     

此过程是Tk脚本库的一部分。它在很大程度上被 tk_messageBox 弃用。它的参数描述了一个对话框:

     

窗口:   用于对话框的顶级窗口的名称。此名称的任何现有窗口都将被销毁。

     

标题的   要在对话框的窗口管理器标题栏中显示的文本。

     

文本:的   消息显示在对话框的顶部。

     

位图:   如果为非空,则指定位图(以适合 Tk_GetBitmap 的形式)显示在对话框的顶部,位于文本的左侧。如果这是一个空字符串,则对话框中不会显示位图。

     

默认:   如果这是一个大于或等于零的整数,那么它给出了按钮的索引,该按钮将成为对话框的默认按钮(最左边的按钮为0,依此类推)。如果小于零或空字符串,则不会有任何默认按钮。

     

字符串:   每个参数都有一个按钮。每个字符串按从左到右的顺序指定要在按钮中显示的文本。

我猜你错过了在对话框中使用的标题文字,从而产生了你打算提供的价值因为默认属于位图插槽,这会混淆代码。添加一个额外的参数,也许是这样的(为了便于阅读,分解为两行):

tk_dialog .dialog2 "Liberate licenses available" \
        "There are some licenses available; great!" info 0 OK

一般建议

你的逻辑看起来有点狡猾。关于没有许可证的投诉是否应该在else条款中?

另外,我将实际的exec行放在自己的 的过程中,以便所有使用它的地方都具有完全相同的版本你可以肯定是正确的。它可以确保错误输入的方式,以便您可以更轻松地捕获任何错误。