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

Dear monks,

I am playing around with TK::Tablematrix. I can't figure out how to dynamically wrap text on multiple lines. Let say I inser values into a table. A cell can't display all the value on one line. What I want is that the raw high is changed so that 2 lines are displayed.

#!perl -w use Tk::TableMatrix; use Tk; my $var = {}; my $text="bla1 bla2 bla3 bla4"; foreach my $row (0..4){ foreach my $col (0..4){ $var->{"$row,$col"} = "$text $col"; } } my $mw=tkinit; my $tm = $mw->Scrolled('TableMatrix', -scrollbars=>'osoe', -bg=>'white', -rows=>3, -cols=>3, -wrap=>1, -multiline=>1, -variable=>\$var)->pack(-expand=>1, -fill=>'both'); MainLoop

This is just a simple script. Let say my $text is not static as in the example, but can change from short (no need of a second line) to very long (need of multiple lines). What I am overseeing? Thanks, cla

Replies are listed 'Best First'.
Re: TableMatrix multiline
by PeterPeiGuo (Hermit) on Jan 15, 2011 at 01:18 UTC

    It looks like that TableMatrix does not support auto-resize.

    But it won't be too difficult for you to calculate the number of lines that the text of a cell occupies. To simplify the matter: 1) don't auto-resize the width (use ColWidth function to get the current width of a cell), and only auto-resize the height; 2) Measure height and width in characters, not pixels.

    When you calculate the number of lines, don't forget to handle special characters like \n.

    Call RowHeight to resize the cell (height only).

    Peter (Guo) Pei