| |
grid [canvas .c -width 600 -height 600]
set halfpi 1.570796
set piover6 0.5235987
set twopi 6.283185
wm resizable . 0 0
.c create oval 50 50 550 550 -fill white -outline black -width 3
for { set h 1 } { $h <= 12 } { incr h } {
set angle [expr { $halfpi - $piover6 * $h }]
set x [expr { 300 + 200 * cos($angle) }]
set y [expr { 300 - 200 * sin($angle) }]
if {$h%3 == 0} {
.c create text $x $y -text $h -font {Helvetica -60} -fill red
} else {
.c create text $x $y -text $h -font {Helvetica -40}
}
}
for { set m 0 } { $m <= 59 } { incr m } {
set angle [expr { $twopi * $m/60 }]
set x0 [expr { 300 + 250 * sin($angle) }]
set y0 [expr { 300 - 250 * cos($angle) }]
set x1 [expr { 300 + 240 * sin($angle) }]
set y1 [expr { 300 - 240 * cos($angle) }]
if {$m%5 == 0} {
set line_width 6
} else {
set line_width 2
}
.c create line $x0 $y0 $x1 $y1 -width $line_width
set x2 [expr { 300 + 230 * sin($angle) }]
set y2 [expr { 300 - 230 * cos($angle) }]
.c create text $x2 $y2 -text $m -font {Helvetica -10}
}
set year_date [clock format [clock seconds] -format "%Y-%m-%d"]
.c create text 300 350 -text $year_date -font {Helvetica -30}
set week [clock format [clock seconds] -format "%A"]
.c create text 300 390 -text $week -font {Helvetica -30}
.c create text 300 180 -text " " -font {"宋体" -30}
.c create text 300 430 -text " " -font {"宋体" -30}
proc hands {} {
catch { .c delete withtag hands }
# Compute seconds since midnight
set s [expr { [clock seconds] - [clock scan 00:00:00] }]
# Hour hand
set angle [expr { $s * $::twopi / 60. / 60. / 12. }]
set y [expr { 300 - 150 * cos($angle) }]
set x [expr { 300 + 150 * sin($angle) }]
.c create line 300 300 $x $y -width 8 -fill black -capstyle. projecting -tags hands
# Minute hand
set angle [expr { $s * $::twopi / 60. / 60. }]
set y [expr { 300 - 175 * cos($angle) }]
set x [expr { 300 + 175 * sin($angle) }]
.c create line 300 300 $x $y -width 4 -fill blue -capstyle. projecting -tags hands
# Angle of second hand
set angle [expr { $s * $::twopi / 60. }]
set y [expr { 300 - 200 * cos($angle) }]
set x [expr { 300 + 200 * sin($angle) }]
.c create line 300 300 $x $y -width 2 -fill violet -tags hands
.c create oval 290 290 310 310 -fill black
# bell
after 1000 hands
}
hands