in reply to How do I determine if a Tk window exists?
#!/usr/bin/perl use Tk; $mw = MainWindow->new; $mw->title("MainWindow"); $mw->Button(-text => "Toplevel", -command => \&do_Toplevel)->pack( ); MainLoop; sub do_Toplevel { if (! Exists($tl)) { $tl = $mw->Toplevel( ); $tl->title("Toplevel"); $tl->Button(-text => "Close", -command => sub { $tl->withdraw })->pack; } else { $tl->deiconify( ); $tl->raise( ); } }
Here is an example which signals the MainWindow if a toplevel window is closed. I'm sure you can find a way to work it in to your script.
#!/usr/bin/perl -w # waitwindow.pl use Tk; use strict; my $mw = MainWindow->new(); my $toplevel_count = 0; my $last_window_died = 1; $mw->Checkbutton( -text => 'No toplevel windows alive', -variable => \$last_window_died, )->pack(); $mw->Button( -text => 'Create a toplevel', -command => sub { my $toplevel = $mw->Toplevel; $toplevel_count++; $last_window_died = 0; $toplevel->Button( -text => 'Destroy Me', -command => sub {$toplevel->destroy} )->pack(); $toplevel->waitWindow; #main window keeps processing events... #this code is executed after $toplevel is destroyed $toplevel_count--; if ($toplevel_count == 0) { #toggle the checkbutton $last_window_died = 1; } },#end sub )->pack( -fill => 'x', -expand => 1, ); $mw->Button( -text => 'Quit', -command => sub {$mw->destroy}, )->pack( -fill => 'x', -expand => 1, ); MainLoop();
|
|---|