Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Line up Calendar

by mikasue (Friar)
on Nov 21, 2006 at 18:00 UTC ( #585318=perlquestion: print w/replies, xml ) Need Help??
mikasue has asked for the wisdom of the Perl Monks concerning the following question:

Fellow Monks,

In a program of mine, I'm trying to show a calendar for the current month. I am using Date::Calc Calendar function and while it prints to the screen nicely formatted, my tk label looks ugly.

use strict; use warnings; use Date::Calc qw/Calendar/; use Tk; my $MW = MainWindow->new(); $MW->geometry('300x200+50+50'); my $cal = Date::Calc::Calendar(2006,11); $MW->Label(-text=>$cal)->grid(); MainLoop;

Can anyone please advice me on how to line up this calendar?

Replies are listed 'Best First'.
Re: Line up Calendar
by webfiend (Vicar) on Nov 21, 2006 at 18:18 UTC

    I'd look for existing solutions before rolling my own, since calendars are hard to get "just so". How about starting with Tk::Month?

    Update for posterity: Don't use Tk::Month. It has limited functionality and doesn't appear to have been maintained in some time. I gave the above advice based on an optimistic appraisal of the module after doing a quick search on CPAN and looking at the docs.

    Update: It works fine. Just keep it simple:

    #!/usr/bin/perl use warnings; use strict; use Tk; use Tk::Month; my $mw = MainWindow->new(); my $month = "November"; my $year = "2006"; my $m = $mw->Month( -printformat => '%a %e', -includeall => 0, -month => $month, -year => $year, -command => sub { my ($ym, $wd) = @_; my ($month, $year) = split( /\s+/ , $ym ); my ($wday, $date) = split( /\s+/ , $wd->[0] ); print "$wday, $month $date $year\n"; }, ); $m->pack; MainLoop;
      How do you use Tk::Month? This code just hangs...
      use strict; use warnings; use Tk; use Tk::Month; my $MW = MainWindow->new(); $MW->geometry('300x200+50+50'); my $m = $MW->Month( -month => 'November', -year => '2006', -title => '%b %y', -command => \&press, -printformat => '%e', -navigation => [0|1], -includeall => [0|1], -showall => [0|1], -first => [0|1|2|3|4|5|6], )->pack(); MainLoop;

        I don't get hanging, but I don't get a nice calendar either. It looks like Tk::Month is old, unmaintained, and broken. Too bad, because it looks like it might have been just the thing.

        Back to the drawing board.

        You want to show a calendar, but what purpose does it serve? Are you trying to do anything with the calendar, or just show the dates of the current month as a reference point?

        Update: I was throwing too much code at it. Tk::Month works fine if I keep it simple. See my original reply to this thread for details.

Re: Line up Calendar
by davidrw (Prior) on Nov 21, 2006 at 19:48 UTC
    Looks like by default it's using a non-fixed width font and centering the text ... this will fixed both issues:
    $MW->Label(-text=>$cal, -font => "courier 10 bold", -justify=>"left")- +>grid();

      I like this option because I can use the tk::label options to change how it looks

      However, tk:Month is something to consider for another purpose.

      Thanks for all replys!

Re: Line up Calendar
by GrandFather (Sage) on Nov 21, 2006 at 20:17 UTC

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://585318]
Approved by ikegami
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (7)
As of 2018-06-20 16:07 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (116 votes). Check out past polls.