Sorry too, I could not resist
- Courier is never stylish
- I prefer Linux/Unix quotation
perl -MTk -e '$w=tkinit;$w->optionAdd("*font","{DejaVu Sans Mono} 20 b
+old");$w->Label(-textvariable=>\$n,-background=>"#f0fff0")->pack;$w->
+repeat(100,sub{$n=scalar localtime time});MainLoop'
Enjoy, Have FUN! H.Merijn
| [reply] [d/l] |
| [reply] [d/l] |
| [reply] |
You can use print to output a string, no need for Tk. This is what Tk makes possible:
#! /usr/bin/perl
use strict;
use warnings;
use Tk;
my $pi = 2 * atan2 1, 0;
sub clock {
my ($c) = @_;
my ($h, $m, $s) = (localtime)[2, 1, 0];
$m += $s / 60;
$h = 5 * ($h % 12) + $m / 12;
draw($h, 3, 50, $c);
draw($m, 2, 100, $c);
draw($s, 1, 100, $c);
}
sub ftime {
sprintf "%02d:%02d:%02d", (localtime)[2, 1, 0]
}
sub draw {
my ($alpha, $w, $l, $c) = @_;
my $my = ($alpha < 15 || $alpha > 45) ? -1 : 1;
my $mx = $alpha > 30 ? -1 : 1;
$alpha = $alpha * 2 * $pi / 60;
my $x = $mx * $l * sin $alpha;
my $y = $my * sqrt($l ** 2 - $x ** 2);
$x = -$x if $alpha >= $pi;
$c->createLine(100, 100, 100 + $x, 100 + $y,
-width => $w,
(-fill => 'grey') x ($w == 1));
}
my $mw = MainWindow->new(-height => 200,
-width => 200,
-title => ftime());
my $c = $mw->Canvas(-height => 200,
-width => 200)->pack;
$mw->repeat(1000, sub {
$c->delete('all');
clock($c);
$mw->configure(-title => ftime());
});
MainLoop();
One-linerification left as an exercise to the reader.
map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
| [reply] [d/l] [select] |
Or just use Tk::Clock and have all of that and more in a one-liner :)
$ perl -MTk -MTk::Clock -we'MainWindow->new->Clock->pack;MainLoop'
So, that is my one-liner to have a fancy clock in Perl/Tk.
Enjoy, Have FUN! H.Merijn
| [reply] [d/l] |