Uhr

Linuxer, bitte mal grad weghören, ihr habt die xclock.
Windows-User, das braucht Ihr: seit Win95 fehlt diese hübsche Systemuhr auf dem Schreibtisch ... hier kriegt ihr sie nachgeliefert! Zeigt permanent pixelgenau die aktuelle Systemzeit aus Sicht des Minitowers dort auf dem Bücherbord. (Nein, den da. Zwischen Karl May und Karl Marx den.)
Beim Start der Uhr sehen Sie das Ziffernblatt oben rechts auf dem Bildschirm. Wenn Sie das Fenster verschieben wollen, doppelklicken Sie zuerst auf das Ziffernblatt, damit die Titelleiste erscheint.
Selbstverständlich ist diese Uhr was ganz besonderes. Denn sie kann ansonsten gar nichts (keine Zwiebeln schneiden, keine Klaviernachhilfe, kein gar nichts). Das soll mir erst mal einer nachmachen. Eingedampft unter 1.5 KB.
Systemvoraussetzungen: Tcl/Tk (ist was anderes als Visual Basic).
#!/usr/bin/tclsh
package require Tk
canvas .uhr -width 200 -height 200 -highlightthickness 0
wm geometry . +[expr {[winfo screenwidth .]-[winfo reqwidth .]}]+0
pack .uhr
bind .uhr <Double-Button-1> {
if {[expr {![wm overrideredirect .]}]} {
wm overrideredirect . yes
# .uhr configure -background SystemBackground
} else {
wm overrideredirect . no
# .uhr configure -background SystemButtonFace
}
}
set PI [expr {asin(1)*2}]
set sekundenzeigerlaenge 85
set minutenzeigerlaenge 75
set stundenzeigerlaenge 60
proc drawClock {} {
global PI
global sekundenzeigerlaenge
global minutenzeigerlaenge
global stundenzeigerlaenge
set aussenradius 95.0
set innenradius 83.0
# Ziffernblatt
.uhr create oval 5 5 195 195 -fill white -outline ""
# Zeiger
.uhr create line 100 100 [expr {100+$stundenzeigerlaenge}] 100 -tag stundenschatten
.uhr create line 100 100 100 [expr {100-$minutenzeigerlaenge}] -tag minutenschatten
.uhr create line 100 100 100 [expr {100+$sekundenzeigerlaenge}] -tag sekundenschatten
.uhr create line 100 100 [expr {100+$stundenzeigerlaenge}] 100 -tag {stundenzeiger zeiger}
.uhr create line 100 100 100 [expr {100-$minutenzeigerlaenge}] -tag {minutenzeiger zeiger}
.uhr create line 100 100 100 [expr {100+$sekundenzeigerlaenge}] -tag {sekundenzeiger zeiger}
.uhr itemconfigure stundenzeiger -width 8
.uhr itemconfigure minutenzeiger -width 4
.uhr itemconfigure sekundenzeiger -width 2 -fill red
.uhr itemconfigure stundenschatten -width 8 -fill gray
.uhr itemconfigure minutenschatten -width 4 -fill gray
.uhr itemconfigure sekundenschatten -width 2 -fill gray
# Ziffern
for {set i 0} {$i < 60} {incr i} {
set r0 [expr {$innenradius + 5}]
set r1 [expr {$innenradius +10}]
set x0 [expr {sin($PI/30*(30-$i))*$r0+100}]
set y0 [expr {cos($PI/30*(30-$i))*$r0+100}]
set x1 [expr {sin($PI/30*(30-$i))*$r1+100}]
set y1 [expr {cos($PI/30*(30-$i))*$r1+100}]
if {[expr {$i%5}]} {
}
}
for {set i 0} {$i < 12} {incr i} {
set x [expr {sin($PI/6*(6-$i))*$innenradius+100}]
set y [expr {cos($PI/6*(6-$i))*$innenradius+100}]
.uhr create text $x $y \
-text [expr {$i ? $i : 12}] \
-font {Helvetica 13 bold} \
-fill #666666 \
-tag ziffer
}
wm resizable . no no
}
proc stundenZeigerAuf {std} {
global PI
global stundenzeigerlaenge
set x0 100
set y0 100
set dx [expr {sin ($PI/6*(6-$std))*$stundenzeigerlaenge}]
set dy [expr {cos ($PI/6*(6-$std))*$stundenzeigerlaenge}]
set x1 [expr {$x0 + $dx}]
set y1 [expr {$y0 + $dy}]
.uhr coords stundenzeiger $x0 $y0 $x1 $y1
set schattenabstand 3
set x0s [expr {$x0 + $schattenabstand}]
set y0s [expr {$y0 + $schattenabstand}]
set x1s [expr {$x1 + $schattenabstand}]
set y1s [expr {$y1 + $schattenabstand}]
.uhr coords stundenschatten $x0s $y0s $x1s $y1s
}
proc minutenZeigerAuf {min} {
global PI
global minutenzeigerlaenge
set x0 100
set y0 100
set dx [expr {sin ($PI/30*(30-$min))*$minutenzeigerlaenge}]
set dy [expr {cos ($PI/30*(30-$min))*$minutenzeigerlaenge}]
set x1 [expr {$x0 + $dx}]
set y1 [expr {$y0 + $dy}]
.uhr coords minutenzeiger $x0 $y0 $x1 $y1
set schattenabstand 4
set x0s [expr {$x0 + $schattenabstand}]
set y0s [expr {$y0 + $schattenabstand}]
set x1s [expr {$x1 + $schattenabstand}]
set y1s [expr {$y1 + $schattenabstand}]
.uhr coords minutenschatten $x0s $y0s $x1s $y1s
}
proc sekundenZeigerAuf {sec} {
global PI
global sekundenzeigerlaenge
set x0 100
set y0 100
set dx [expr {sin ($PI/30*(30-$sec))*$sekundenzeigerlaenge}]
set dy [expr {cos ($PI/30*(30-$sec))*$sekundenzeigerlaenge}]
set x1 [expr {$x0 + $dx}]
set y1 [expr {$y0 + $dy}]
.uhr coords sekundenzeiger $x0 $y0 $x1 $y1
set schattenabstand 5
set x0s [expr {$x0 + $schattenabstand}]
set y0s [expr {$y0 + $schattenabstand}]
set x1s [expr {$x1 + $schattenabstand}]
set y1s [expr {$y1 + $schattenabstand}]
.uhr coords sekundenschatten $x0s $y0s $x1s $y1s
}
proc showTime {} {
after cancel showTime
after 1000 showTime
set secs [clock seconds]
set l [clock format $secs -format {%H %M %S} ]
wm title . [join $l :]
set std [lindex $l 0]
set min [lindex $l 1]
set sec [lindex $l 2]
regsub ^0 $std "" std
regsub ^0 $min "" min
regsub ^0 $sec "" sec
set min [expr {$min + 1.0 * $sec/60}]
set std [expr {$std + 1.0 * $min/60}]
stundenZeigerAuf $std
minutenZeigerAuf $min
sekundenZeigerAuf $sec
}
drawClock
showTime
Vergnügen!
11.3.2022
<< | Heimatseite | Verzeichnis | Stichworte | Autor | >>