Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked

Tk question

by monktim (Friar)
on Nov 13, 2003 at 22:42 UTC ( [id://306956] : perlquestion . print w/replies, xml ) Need Help??

monktim has asked for the wisdom of the Perl Monks concerning the following question:

When an event occurrs, I'm poping up a window that has a button. When I click the button I'd like to kill the window and continue processing.

How do I kill the window without killing the program? See sub ok below.


use strict; use warnings; use Tk; my $notified = 0; notify(); continue_processing(); exit 0; sub notify { my $win = new MainWindow; $win->Label(-text => 'Window!')->pack; $win->Button(-text => 'OK', -command => sub{ok()})->pack; Tk::MainLoop(); } sub ok { $notified = 1; Tk::exit(0); } sub continue_processing() { print "Here I am $notified\n"; }

Replies are listed 'Best First'.
Re: Tk question
by batkins (Chaplain) on Nov 13, 2003 at 22:49 UTC
    You need to call destroy on the target widget. When you create the button, do something like this:
    $win->Button(-text => 'OK', -command => [\&ok, $win])->pack;
    This will call ok($win) whenever the OK button is triggered (In general, \&ok is clearer than sub { ok() }). ok() then becomes:
    sub ok { my $win = shift; $win->destroy; $notified = 1; }
    Are you sure it was a book? Are you sure it wasn't.....nothing?
      I think the point being sought by the OP was to leave the "Tk::exit" out of this process -- apart from that, you've shown the way quite nicely.