GS Here is a linear clock where hour/minute/second are displayed with an horizontal bar.
# linearclock.tcl
# Author: Gerard Sookahet
# Date: 1 Oct 2022
# Description: Display a linear clock with 3 bars
package require Tk
namespace import ::tcl::mathop::*
font create ft -family Arial -weight bold -size 14
wm geometry . +20+20
wm overrideredirect . 1
bind all <Escape> {exit}
proc every {ms body} {
uplevel #0 $body
after $ms [list every $ms $body]
}
proc CreateRectangle {w color l} {
return [$w create polygon $l -fill $color]
}
proc MoveRightSideRectangle {w tag x1} {
set lcoord [$w coords $tag]
$w imove $tag 3 $x1 [lindex $lcoord 3]
$w imove $tag 4 $x1 [lindex $lcoord 5]
}
set sp 10
set xo 0
set yo $sp
set x1 1
set dx 240
set dy 40
set wd [+ 30 $dx]
set ht [* 3 [+ $dy $sp]]
pack [canvas .c -width $wd -height $ht -bg black] -fill both -expand yes
lmap {t clr} {H green M orange S yellow} {
set tag($t) [CreateRectangle .c $clr [list $xo $yo $x1 $yo $x1 [+ $yo $dy] $xo [+ $yo $dy]]]
set tag([string tolower $t 0 0]) [.c create text [+ $dx 10] [+ $yo [/ $dy 2]] \
-fill $clr -justify left -font ft -text "0"]
incr yo [+ $dy $sp]
}
every 1000 {
lmap {t d} {H 24 M 60 S 60} {
set T [scan [clock format [clock seconds] -format %$t] %d]
set x1 [/ [* $T $::dx] $d]
MoveRightSideRectangle .c $::tag($t) $x1
.c itemconfigure $::tag([string tolower $t 0 0]) -text $T
}
}