NateTut has asked for the wisdom of the Perl Monks concerning the following question:

The subroutine below attempts to create a Tk window sized to closely fit the text in @ChapterText. It was developed in the try and try again method and is kludgy. It mostly works, but sometimes it leaves too much white space at the bottom of the window.

Is there a way to size a Tk window to fit it's contents?

sub DisplayChapter { my ($Chapter) = shift; my @ChapterText = GetChapter($Chapter); my $MaxLineLength = 0; foreach(@ChapterText) { if(length($_) > $MaxLineLength) { $MaxLineLength = length($_); } } my $GeometryString = ($MaxLineLength * 8) . 'x' . (scalar(@Chapter +Text) * 21); $mw->geometry($GeometryString); $mw->title(' ' x ((($MaxLineLength - 2) / 2) + 5) . (sprintf('%7s', + Number2Roman($Chapter)))); $OutputText->delete('1.0', 'end'); $text->tagConfigure(centered => -justify => 'center'); foreach my $Line (@ChapterText) { $text->insert('end', $Line, 'centered'); } $OutputText->pack(qw/-side bottom -fill both -expand 1/); }

Replies are listed 'Best First'.
Re: Tk Formatting
by keszler (Priest) on Oct 22, 2009 at 19:21 UTC
    For many widgets, $widget->height($widget->reqheight) will work. (and also s/height/width/g).

    Assuming that you're using some form of a Tk::Text for the @ChapterText, I'd suggest using the textbox's height and width (which set the widget size based on the font used) and then resize the MainWindow based on $text->reqheight and $text-reqwidth.

Re: Tk Formatting
by lamprecht (Friar) on Oct 22, 2009 at 21:41 UTC
    Hi,

    maybe a Tk::Message widget would make that easier:

    perl -MTk -e"tkinit->Message(-text=>qq/Multiline Text \n/x5,-justify => 'center')->pack; MainLoop"
    Cheers, Christoph