I looked at the adjuster and it didn't do what I needed... so let me try to explain better.
I have a window, I put in a labeledframe which we can call foo. In it, I put a checkbox (enable foo) and a frame(which I use as a kind of container). If you uncheck the checkbox, the container frame is packForget'ed. If you recheck it, it is pack'ed. By default, the whole window resizes after each change. But if while it is unchecked, the user resizes the window slightly (in the y direction), then if they check the checkbox it will not resize to fit the new contents, causing them to be off the bottom of the gui.
So when the user does a manual resize, it does something to stop the automatic resizing. I want to turn the auto resizing back on.
Of course I could manually handle the resizing in this case, but in the real case there are just too many widgets and too many other things to make that effective.
Randell | [reply] |
| [reply] |
fair enough...
Below is some example code.
If you run that, you can check and uncheck the checkboxes and the window will resize to fit the contents.
But if you uncheck the enable A checkbox, then manually resize the window a tiny bit in the +Y direction. Then recheck the enable A checkbox, the auto resize will stop and it will push the exit button off the visible window.
I don't know what handles that automatic resizing. So I don't even know where to look. But somehow it gets turned off, and I would like to turn it back on.
I would expect if I could turn it back on that it would add space or remove space equal to the size of the widget getting packed or unpacked, since that is what it seems to do before a manual user resize.
I could of course take over the resizing operation in my code, for everything that gets packed and unpacked, but in the real case, that would be a ton of stuff, and not practical. Which is why I am looking to turn the auto resizer back on. It is really kind of a crop or fit function...
#!/usr/bin/perl
use strict;
use Tk;
our ($goMainWindow);
our (%ghGuiObjs);
our (%ghGuiCBVars);
$| = 1;
&main();
sub main {
buildGui();
MainLoop;
} #end sub main
sub updateA {
if ( $ghGuiCBVars{"nEnableFrameA"} == 1 ) {
$ghGuiObjs{"oContainerA"}->pack();
} else {
$ghGuiObjs{"oContainerA"}->packForget();
}
}
sub updateB {
if ( $ghGuiCBVars{"nEnableFrameB"} == 1 ) {
$ghGuiObjs{"oContainerB"}->pack();
} else {
$ghGuiObjs{"oContainerB"}->packForget();
}
}
sub buildGui {
$goMainWindow = new MainWindow;
my ($oLabel) = $goMainWindow->Label(
-text => "This is my example",
)->pack(
-padx => '5',
-pady => '5',
-expand => '1',
-fill => 'x',
);
my ($oCbA) = $goMainWindow->Checkbutton(
-text => 'Enable A',
-variable => \$ghGuiCBVars{"nEnableFrameA"},
-command => \&updateA,
-anchor => 'w',
);
$ghGuiCBVars{"nEnableFrameA"} = 1;
my ($oFrameA) = $goMainWindow->Labelframe(
-labelwidget => $oCbA,
)->pack(
-padx => '5',
-expand => '1',
-fill => 'both',
);
my ($oContainerFrameA) = $oFrameA->Frame(
)->pack(
-expand => '1',
-fill => 'both',
-pady => '5',
);
$ghGuiObjs{"oContainerA"} = $oContainerFrameA;
my ($oLbA) = $oContainerFrameA->Listbox(
-relief => 'groove',
-borderwidth => '5',
-height => '5',
)->pack(
-fill => 'both',
-expand => '1',
);
my ($oCbB) = $goMainWindow->Checkbutton(
-text => 'Enable B',
-variable => \$ghGuiCBVars{"nEnableFrameB"},
-command => \&updateB,
-anchor => 'w',
);
$ghGuiCBVars{"nEnableFrameB"} = 1;
my ($oFrameB) = $goMainWindow->Labelframe(
-labelwidget => $oCbB,
)->pack(
-padx => '5',
-expand => '1',
-fill => 'both',
);
my ($oContainerFrameB) = $oFrameB->Frame(
)->pack(
-expand => '1',
-fill => 'both',
-pady => '5',
);
$ghGuiObjs{"oContainerB"} = $oContainerFrameB;
my ($oLbB) = $oContainerFrameB->Listbox(
-relief => 'groove',
-borderwidth => '5',
-height => '5',
)->pack(
-fill => 'both',
-expand => '1',
);
my ($oExit) = $goMainWindow->Button(-text => 'Exit',
-command => sub{exit},
)->pack(
-padx => '5',
-pady => '5',
-side => 'bottom',
);
}
| [reply] [d/l] |