Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Adjuster(3)	      User Contributed Perl Documentation	   Adjuster(3)

       Tk::Adjuster - Allow size of packed widgets to be adjusted by user

       use Tk::Adjuster;

       $adjuster = $widget->Adjuster(?options?);

       Name: restore
       Class: Restore
       Switch: -restore
	   Specifies a boolean value that determines whether the Adjuster
	   should forcibly attempt to make room	for itself (by reducing	the
	   size	of its managed widget) when it is unmapped (for	example, due
	   to a	size change in a top level window).  The default value is 1.

       Name: side
       Class: Side
       Switch: -side
	   Specifies the side on which the managed widget lies relative	to the
	   Adjuster. In	conjunction with the pack geometry manager, this
	   relates to the side of the master against which the managed widget
	   and the Adjuster are	packed.	 Must be left, right, top, or bottom.
	   Defaults to top.

       Name: widget
       Class: Widget
       Switch: -widget
	   Specifies the widget	which is to be managed by the Adjuster.

       Tk::Adjuster is a Frame containing a "line" and a "blob".

       Dragging	with Mouse Button-1 results in a line being dragged to
       indicate	new size. Releasing Button-1 submits GeometryRequests on
       behalf of the managed widget which will cause the packer	to change the
       widget's	size.

       If Drag is done with Shift button down, then GeometryRequests are made
       in "real	time" so that text-flow	effects	can be seen, but as a lot more
       work is done behaviour may be sluggish.

       If widget is packed with	-side => left or -side => right	then width is
       adjusted. If packed -side => top	or -side => bottom then	height is

       packPropagate is	turned off for the master window to prevent adjustment
       changing	overall	window size. Similarly packPropagate is	turned off for
       the managed widget if it	has things packed inside it. This is so	that
       the GeometryRequests made by Tk::Adjuster are not overridden by pack.

       In addition, the	managed	widget is made non-expandable to prevent the
       geometry	manager	reallocating freed space in the	master back to the
       managed widget.	Note however that expansion is turned off only after
       the Adjuster is mapped, which allows the	managed	widget to expand
       naturally on window creation.

       The Tk::Widget method, packAdjust, calls	pack on	the widget, then
       creates an instance of Tk::Adjuster, and	packs that "after" the widget.
       Its use has two disadvantages however: the Adjuster widget is not made
       available to the	caller,	and options cannot be set on the Adjuster. For
       these reasons, the Tk::Adjuster method, packAfter is preferred, but
       packAdjust is retained for backwards compatibility.

       $adjuster->packAfter(managed_widget, ?pack_options?)
	   This	command	configures the Adjuster's -widget and -side options
	   respectively	to managed_widget and the -side	value specified	in
	   pack_options	(top if	not specified).	It then	packs the Adjuster
	   after managed_widget, with -fill set	to x or	y as appropriate.

	   This	command	calls Tk::Widget::packForget on	the Adjuster.  If a
	   parameter is	provided and it	has a true boolean value, then
	   packForget is also called on	the managed widget.

	   This	command	returns	the value $adjuster->cget('-widget'), ie. the
	   reference to	the managed widget.

       Using an	Adjuster to separate two widgets, whereby the left widget is
       managed,	and right widget expands to fill space on a window resize

       a) Using	packAfter (preferred interface)

	 use Tk;
	 use Tk::Adjuster;

	 my $f = MainWindow->new;
	 my $lst1 = $f->Listbox();
	 my $adj1 = $f->Adjuster();
	 my $lst2 = $f->Listbox();

	 my $side = 'left';
	 $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
	 $adj1->packAfter($lst1, -side => $side);
	 $lst2->pack(-side => $side, -fill => 'both', -expand => 1);

       b) Using	packAdjust

	 use Tk;
	 use Tk::Adjuster;

	 my $f = MainWindow->new;
	 my $lst1 = $f->Listbox();
	 my $lst2 = $f->Listbox();

	 my $side = 'left';
	 $lst1->packAdjust(-side => $side, -fill => 'both');
	 $lst2->pack	  (-side => $side, -fill => 'both', -expand => 1);

       c) Using	the standard Tk::Widget::pack

	 use Tk;
	 use Tk::Adjuster;

	 my $f = MainWindow->new;
	 my $side = 'left';
	 my $lst1 = $f->Listbox();
	 my $adj  = $f->Adjuster(-widget => $lst1, -side => $side);
	 my $lst2 = $f->Listbox();

	 $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
	 $adj->pack (-side => $side, -fill => 'y');
	 $lst2->pack(-side => $side, -fill => 'both', -expand => 1);


       Changing	the above examples so that $side has the value 'right' means
       the left	widget expands to fill space on	a window resize.

       Changing	the above examples so that $side has the value 'top' produces
       a testcase with a horizontal Adjuster.  Here the	bottom widget expands
       to fill space on	a window resize.  Packing to the 'bottom' makes	the
       top widget expand to fill space on window resize.

       Using -restore => 0 for multiple	columns

       In the case of multiple columns (or rows) the "restore" functionality
       of the Adjuster can be inconvenient. When the user adjusts the width of
       one column and thereby pushes the Adjuster of another column off	the
       window, this adjuster tries to restore itself by	reducing the size of
       its managed widget.  This has the effect	that column widths shrink; and
       the original size is not	restored when the user reverses	the
       originating change. The -restore	option can be used to turn off this
       functionality. (It makes	some sense, however, to	leave -restore turned
       on for the first-packed Adjuster, so that at least one Adjuster always
       remains visible.)

	 use Tk;
	 use Tk::Adjuster;
	 my $f = MainWindow->new;
	 my $lst1 = $f->Listbox();
	 my $adj1 = $f->Adjuster();
	 my $lst2 = $f->Listbox();
	 my $adj2 = $f->Adjuster(-restore => 0);
	 my $lst3 = $f->Listbox();

	 my $side = 'left';
	 $lst1->pack(-side => $side, -fill => 'both', -expand => 1);
	 $adj1->packAfter($lst1, -side => $side);
	 $lst2->pack(-side => $side, -fill => 'both', -expand => 1);
	 $adj2->packAfter($lst2, -side => $side);
	 $lst3->pack(-side => $side, -fill => 'both', -expand => 1);


       It is currently not possible to configure the appearance	of the
       Adjuster.  It would be nice to be able to set the width and relief of
       the Adjuster "line" and the presence/absence of the "blob" on the

       Tk::Adjuster works theoretically	with the grid geometry manager but
       there are currently some	problems which seem to be due to bugs in grid:

	 a) There's never an Unmap event for the adjuster, so the "restore"
	    functionality has no effect.
	 b) After adjusting, widgets protrude into the border of the master.
	 c) grid('Propagate', 0) on MainWindow has no effect - window shrinks/grows
	    when widgets are adjusted.
	 d) Widgets shuffle to correct position	on startup

perl v5.32.0			  2013-11-15			   Adjuster(3)


Want to link to this manual page? Use this URL:

home | help