I'm guessing that you're writing a Perl program to display data with Tk or some other GUI, but your question does not mention Perl. Perhaps it would help to learn how to ask a better question.
| [reply] |
Show a minimal code example that runs and shows the problem. It's quite likely you are just making too many widgets, and need to switch to a single widget that handles many cells, something like a TableMatrix or a Canvas.
| [reply] |
Ok, here is a minimal example. The effect is about the same. However, in this example the number does not start off correctly at 0. In mine, it begins the grid at the correct position. What is the same, is if you try to scroll to the end of the buttons, it cuts off.
#!/usr/bin/perl -w
# Multiple Widgets with one scrollbar.pl
use Tk;
require Tk::Pane;
$mw = MainWindow->new();
$mw->geometry("1280x720+0+0");
$mw->title("One Scrollbar/Three Listboxes");
$mw->Button(-text => "Exit",
-command => sub { exit })->pack(-side => 'bottom');
$RowDescriptFrame = $mw->Scrolled('Pane');
$RowDescriptFrame->pack(-fill => 'both');
foreach my $num (0..1000)
{
$RowDescriptFrame->Button(-text => "Number: $num\nAgain: $num")->g
+rid(-row => 0, -column => $num, -sticky => "nsew");
}
MainLoop;
| [reply] [d/l] |
I see your bug, and it's not due to grid size, the same thing happens with pack. I'm sure you are running into some limit with Tk::Pane, and the number of widgets it can handle. It has to do calculations during scrolling for each child widget, and it is overwhelmed by the number of widgets at the normal scrolling speedUse the right widget for the job, in this case, maybe a Tk::Table. This works fine.
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
use Tk::Table;
my $mw= tkinit;
#$mw->geometry("400x400+100+100");
my $table = $mw->Scrolled('Table',
-rows =>1,
-columns => 1000,
-fixedrows => 5, #trick to hide scrollbars
# -fixedcolumns => 5,
-scrollbars => 'soe',
-takefocus => 1,)->pack(-fill=>'both',
-expand=>1);
my %widgets;
my $row = 1;
for my $col(1..1000){
$widgets{$row}{$col} = $table->Button(
-text=> "$row - $col",
-background => 'white',
-command => sub{ do_me($row,$col) }
);
$table->put( $row,$col,$widgets{$row}{$col} );
}
MainLoop;
sub do_me{
my ($row, $col) = @_;
print "$row $col\n";
}
| [reply] [d/l] |
Ah, well, your best bet is to get to the beach during low tide, then create the grid. That way you will be able to see all 1000 columns until high tide arrives.
Nevermind. Could have sworn the OP was talking about drawing in the sand :P
I'm so adjective, I verb nouns! chomp; # nom nom nom
| [reply] |