http://www.perlmonks.org?node_id=1044407


in reply to Non resizable window

I couldn't reproduce your resizable() issue. I tried it with (0,0), (1,0), (0,1) and (1,1): all worked as documented (see Tk::Wm).

You don't want both __DATA__ and __END__ (see perldata - Special Literals).

You also have duplicated code at the top of your script and all button callbacks generate warnings because you haven't defined sub manipulate_link { ... } yet (you may be aware of that one).

Here's what I tested with:

#!/usr/bin/env perl use strict; use warnings; use Tk; require Tk::Pane; require Tk::BrowseEntry; require Tk::DialogBox; my $MW = MainWindow->new( -title => 'GUI Demo', -name => 'Demo', ); $MW->resizable(0,0); # not resizable in any direction foreach my $txt (<DATA>) { chomp($txt); my $b = $MW->Button( -text => $txt, -width => 30, -height => 3, -command => sub {manipulate_link($txt)}, ); $b->pack(qw/-side top -expand yes -pady 3/); } MainLoop; __DATA__ Compile all Compile selected blocks Get selected blocks Put selected blocks Browse & Compare Exit

-- Ken

Replies are listed 'Best First'.
Re^2: Non resizable window
by Anonymous Monk on Jul 16, 2013 at 06:03 UTC
    Thanks for the replies. After looking into the manual, I changed the code as follows and finally got the desired function: could it be that resizable acts different in my perl or did I misunderstood what it is supposed to do? Thanks
    #!/usr/local/bin/perl -w use strict; use Tk; require Tk::Pane; require Tk::BrowseEntry; require Tk::DialogBox; use warnings; use strict; use Tk; my $MW = MainWindow->new( -title => 'Habitat GUI', -name => 'Demo', ); #$MW->resizable(1,1); # not resizable in any direction $MW->minsize(200,400); $MW->maxsize(200,400); foreach my $txt (<DATA>) { chomp($txt); my $b = $MW->Button( -text => $txt, -width => 30, -height => 3, -command => sub {manipulate_link($txt)}, ); $b->pack(qw/-side top -expand yes -pady 3/); } MainLoop; __DATA__ Compile all Compile selected blocks Get selected blocks Put selected blocks Browse & Compare Exit
      "... could it be that resizable acts different in my perl ..."

      Seems unlikely; although, that question can best be answered when the versions of Perl and Tk that you're using are known.

      resizable() has worked that way for all of the current millenium. Learning Perl/Tk documents the same behaviour for Perl 5.003 and Tk 400.202 — that book was published in 1999.

      "... or did I misunderstood what it is supposed to do? ..."

      Possibly; although, that question can best be answered when your understanding of what it's supposed to do is known.

      Do you understand that the two arguments to resizable($x, $y) are boolean values? [$x indicating whether the width can be changed; $y indicating whether the height can be changed]

      Do you also understand that resizable() refers to interactive resizing (e.g. dragging the window border with the mouse) and that it does not refer to programmatic resizing (e.g. in your example code, -width will affect the size of the window)?

      Two final thoughts on this: see Tk::Wm - BUGS and how to work around them; and try calling resizable() as the last thing after all widgets are created and pack()ed (i.e. immediately before MainLoop is called).

      -- Ken