Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Tk::Pane widget size limit?

by tybalt89 (Monsignor)
on Aug 24, 2021 at 00:32 UTC ( [id://11136043]=note: print w/replies, xml ) Need Help??


in reply to Tk::Pane widget size limit?

Looking at the actual X11 protocol, the 'x' and 'y' offsets within a parent window are signed shorts. It looks like that is the issue you are running into.

Try  $txt = "Double Col $col"; and look closely at the starting labels, and also go to the right end, there are definite signs of wrapping.

Replies are listed 'Best First'.
Re^2: Tk::Pane widget size limit?
by jbuck (Novice) on Aug 24, 2021 at 03:34 UTC
    Very interesting find! That seems like quite an oversight in the X11 protocol; surely there are many programs which would need a sizeable scroll distance, regardless of how many Tk widgets are being managed. Can you think of any way to overcome this through the TK interface?

      Note also that the height and width of a window are passed in unsigned shorts, so that the max width of a window is 65535 pixels. There are not that many displays that are 65535 pixels wide...

      You could ->pack and ->packForget in a non-scrolled Pane using the scrollbar to control which of your large array of Labels are packed. Only pack a screen widths of subwidgets at a time.

      Or only create a screen widths of Label widgets, then change their contents based on the scrollbar.

      Or scroll in two dimensions.

      #!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Pane; my $mw = MainWindow->new(); $mw->geometry('500x500'); my $pane = $mw->Scrolled( 'Pane', -scrollbars => 'se' )->pack( -side = +> 'left', -fill => 'both', -expand => 1 ); my $perrow = 100; foreach my $col ( 1 .. 1000 ) { my $txt = "Col $col"; # doesn't work $pane->Label( -text => $txt, -relief => 'groove', -height => 20, )->grid( -row => int +($col - 1) / $perrow, -column => ($col - 1) % $perrow ); } MainLoop;

      And here's an example of making a fixed number of Labels and changing the data in each with a scrollbar.

      #!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Pane; my $offset = 0; my $labelcount = 7; my $mw = MainWindow->new(); $mw->geometry('500x500'); my $pane = $mw->Scrolled( 'Pane', -scrollbars => 'se' )->pack( -side = +> 'left', -fill => 'both', -expand => 1 ); my @data = map "Col $_", 1 .. 1000; $pane->Scale(-orient => 'horizontal', -from => 0, -to => @data - $labelcount, -variable => \$offset, -command => \&sho +w, -showvalue => 0, )->pack(-fill => 'x', -side => 'bottom'); my @labels = map { $pane->Label( -text => $data[$_], -relief => 'groove', -height => 20, -width => 8, )->pack( -side => 'left' ); } 0 .. $labelcount - 1; MainLoop; sub show { my $i = $offset; for ( @labels ) { $_->configure( -text => $data[$i++] ); } }

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11136043]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (2)
As of 2024-04-20 02:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found