This may not solve the problem exactly. But here's an example of using one Tk::Text widget to contain other Tk widgets, even other Text widgets.
#!/usr/bin/perl -w
use strict;
use Tk;
my $MW = MainWindow->new;
my $TX = $MW->Scrolled( 'Text', -wrap => 'none' )->pack( -expand => 'y
+', -fill => 'both' );
my $t1 = $TX->Scrolled( "Text", width => 20 );
my $t2 = $TX->Scrolled( "Text", width => 20 );
my $t3 = $TX->Scrolled( "Text", width => 20 );
my $t4 = $TX->Scrolled( "Text", width => 20 );
my $t5 = $TX->Scrolled( "Text", width => 20 );
$TX->window('create', 'end', -window => $t1);
$TX->window('create', 'end', -window => $t2);
$TX->window('create', 'end', -window => $t3);
$TX->window('create', 'end', -window => $t4);
$TX->window('create', 'end', -window => $t5);
MainLoop;
It is left as an exercise for the reader to get all that to size in an eye-pleasing way.
PS in 'perldoc Tk::Scrollbar' there is mention of an '-orient' attribute, but attempts to use it (on my machine) fail. Very disappointing.
I also suggest looking at a scrolling Tk::Canvas widget as the container for multiple widgets, but don't have a facile example since Canvas is a little more complex. The 'widget' demo offers some hints, but nothing to latch onto. | [reply] [d/l] |
Very nice ichimunki,
I was trying to get this to work but couldn't get the 'x' scroll bar to work until I added -wrap => 'none',, which I was going to mention in the original version of my reply, but between your original post and my figuring out what to do, you had already figured it out for yourself (or maybe you already knew and just forgot to add it the first time).
BTW, the -orient is only for hand-created scrollbars. Using the Scrolled method, you want to use the -scrollbars => 'osoe' option, which, in this case, assigns two optional scrollbars (the 'o' portion), one on the 's'outh, and one on the 'e'ast. You can assign the scrollbars to the four sides, and each can be made optional (put the 'o' before the direction portion).
| [reply] [d/l] [select] |
-orient: Yes. I meant that I was trying to add an 's' scrollbar to the original code offered by jeanine. But when I added it, instead of getting a horizontal scrollbar across the bottom I got a vertical scroll on the bottom! Which is why I attempted to use the -orient option which is listed in the perldoc (although no valid values are given for it), but failed on my installation.
And yes, stuffing things into Tk::Text widgets gets a bit tricky (since you have to remember things like wrapping)... which is why I pointed out Tk::Canvas-- but Canvas widgets require a lot more thought and planning to use effectively.
| [reply] |
Hi jeanine,
Frame doesn't like scrolling which is why Tk::Pane was invented. With it you can use Pane inside of a Scrolled method like so:
#!/usr/bin/perl -w
use Tk;
use Tk::Pane;
$top = MainWindow->new();
$top->maxsize(600,300);
$NUMCOLS = 10; # Number of columns to display
# Create a frame into which all the text boxes will go
$frm = $top->Scrolled(
'Pane',
-height => 299,
-width => 599,
-sticky => 'we',
-scrollbars => 'soe'
)->pack(-fill => 'both', -expand => 1);
# Set up textboxes
for ($i = 0; $i < $NUMCOLS; $i++) {
$block[$i] = $frm->Text(
-width => 20,
-height => 30,
-background => 'white'
);
for ($j = 0; $j < 100; $j++) {
$block[$i]->insert('end',"$j\n");
}
}
## Pack the textboxes
foreach $box (@block) {
$box->pack(-side => 'left');
}
MainLoop();
Hope this helps,
{NULE}
--
http://www.nule.org | [reply] [d/l] |