tcl 在IC 行业是使用非常广的一个脚本语言,很多EDA tool 也都是支持tcl的,所以tcl tk的学习资料可以找到很多。
像Synopsys的ICC DC CustomCompile Laker FC等等,或验证calibre Ansys的Totem RedHawk以及国产一些EDA tool.tcl/TK开发的脚本很容易集成到EDA工具中.
Tk GUI工具包最初是为TCL脚本语言编写的,现在几乎其他语言都有tk的扩展.
工作中对于一些复杂的command不方便记忆或一些自己开发的一些扩展我们都可以开发简易的GUI来包装下。
比如前面分享的p2p的功能,GUI部分就是TK写的。
下面举个简单的TK实例一个简陋的桌面挂件:
>wish clock.tcl
#!/usr/bin/env tclsh
package require Tk
proc every {ms body} {eval $body; after $ms [info level 0]}
proc drawhands w {
$w delete hands
set secSinceMidnight [expr {[clock sec]-[clock scan 00:00:00]}]
foreach divisor {60 3600 43200} length {45 40 30} width {1 3 7} {
set angle [expr {$secSinceMidnight * 6.283185 / $divisor}]
set x [expr {50 + $length * sin($angle)}]
set y [expr {50 - $length * cos($angle)}]
$w create line 50 50 $x $y -width $width -tags hands
}
}
proc toggle {w1 w2} {
if [winfo ismapped $w2] {
foreach {w2 w1} [list $w1 $w2] break ;# swap
}
pack forget $w1
pack $w2
}
#-- Creating the analog clock:
canvas .analog -width 100 -height 100 -bg white
every 1000 {drawhands .analog}
pack .analog
#-- Creating the digital clock:
label .digital -textvar ::time -font {Courier 24}
every 1000 {set ::time [clock format [clock sec] -format %H:%M:%S]}
bind . <1> {toggle .analog .digital}