> winfo reqwidth/height on the frame once populated and after an update
idletasks may give you the right size. > Make sure you check for
reasonable maximums though.
I don't understand how to use reqwidth and reqheight. They return the
'requested' width and height, which seems to always be 396, 282 for a
window. Can you explain how it would work? Here's sample code that
tries using reqwidth/reqheight and also width/height. Width/height
simply returns the current size, which if the window is stretched or
shrunk will be different from 396, 282.
Dave
use strict;
use Tkx;
Tkx::package_require("tile");
Tkx::package_require("BWidget");
my $mw = Tkx::widget->new(".");
my $sw = $mw->new_ScrolledWindow();
my $sf = $sw->new_ScrollableFrame();
$sw->setwidget($sf);
$sw->g_grid(-row => 0, -column => 0, -sticky => "nsew");
Tkx::grid(rowconfigure => $mw, 0, -weight => 1);
Tkx::grid(columnconfigure => $mw, 0, -weight => 1);
# This is the one tricky conversion. We are getting a widget ref
# back from Tcl that has never been seen as a widget in Tkx, thus
# the Tkx::widget call makes the right kind of object.
my $subf = Tkx::widget->new($sf->getframe());
my $b;
for my $row (1..20) {
for my $col (1..20) {
$b = $subf->new_ttk__button(-text => "$row,$col",
-command => sub { exit(); });
$b->g_grid(-row => $row, -column => $col);
}
}
$b = $subf->new_ttk__button(-text => "reqwidth", -command =>
\&Reqwidth);
$b->g_grid(-row => 0, -column => 1);
$b = $subf->new_ttk__button(-text => "width", -command => \&Width);
$b->g_grid(-row => 0, -column => 2);
Tkx::MainLoop;
sub Reqwidth
{
my $width = Tkx::winfo('reqwidth', $mw);
my $height = Tkx::winfo('reqheight', $mw);
print "reqwidth: $width, reqheight: $height\n";
$mw->g_wm_geometry($width . "x" . $height . "+50+50");
}
sub Width
{
my $width = Tkx::winfo('width', $mw);
my $height = Tkx::winfo('height', $mw);
print "width: $width, height: $height\n";
$mw->g_wm_geometry($width . "x" . $height . "+50+50");
}