Here's an example that works:
#!/usr/bin/perl -w use Tk; my $mw = MainWindow->new(-title=>"Demo"); my $HlpBttn = $mw->Button(-text=>"Make NEW Window", -command=> sub { m +ake_win(); }); $HlpBttn->pack(-padx =>60, -pady =>10); MainLoop; sub make_win { my $win = $mw->Toplevel(-title=>'new window'); my $Bttn = $win->Button(-text=>"CLOSE this window", -command=> sub { close_win($win); } )->pack(-padx =>60, -pady =>10); } sub close_win { my $thiswin = $_[0]; $thiswin->destroy; }
make_win creates a closure in the -command option, creating an anonymous subref that carries around with it an instance of $win. When the "CLOSE this window" button is pressed in a given window, the coderef that is exectuted uses the instance of $win that it carries with it.
Actually, I could have just said $win->Button(yada-yada...-command=> sub { $win->destroy })....
Note that for either way to work, $win must be a lexical, outside the scope of the anonymous coderef.--Bob Niederman, http://bob-n.com
All code given here is UNTESTED unless otherwise stated.
In reply to Re: Functions and Tk
by bobn
in thread Functions and Tk
by surrealistfashion
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |