http://www.perlmonks.org?node_id=11132473

..I'm sorry.. I couldn't resist :)

perl -MTk -e "$w=tkinit;$w->optionAdd('*font','Courier 20 bold');$w->L +abel(-textvariable=>\$n,-background=>'lavender')->pack;$w->repeat(100 +,sub{$n=scalar localtime time});MainLoop"

L*

PS minimalistic version

perl -MTk -e "$w=tkinit;$w->geometry('400x1');$w->repeat(100,sub{$w->configure(-title=>scalar localtime time)});MainLoop"

There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.

Replies are listed 'Best First'.
Re: Stylish Tk clock -- oneliner
by Tux (Canon) on May 12, 2021 at 12:58 UTC

    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
      I prefer Linux/Unix quotation

      If you would both use q{} inside the Perl code then the users of the other O/S only need to change the outer quotes (the shell quotes). Just saying ;-)


      🦛

      Courier is never stylish

      I beg to differ: courier is the epitomy of style

Re: Stylish Tk clock -- oneliner
by choroba (Cardinal) on May 12, 2021 at 15:38 UTC
    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]

      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