On linux, I'm thinking you could make your status_bar a toplevel widget, and you could do something like this snippet
#!/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();
|