in reply to Re: $mw->OnDestroy and Dialog Box
in thread $mw->OnDestroy and Dialog Box
I had tried the latter example. The problem is that the exit_app() sub gets bypassed if you shut down using the 'X' button rather than the 'Exit' button.
I have come up with
use strict; use warnings; use Tk; use Tk::DialogBox; my $exit_pressed = 0; my $mw = MainWindow->new(); $mw->OnDestroy(\&exit_x); $mw->Button(-text => 'Exit', -command=> \&exit_app)->pack(-side=>'righ +t', -ipadx => 10, -padx=>30); MainLoop; sub exit_app{ print "1"; $exit_pressed = 1; my $db = $mw->DialogBox(-title => 'Save?',-buttons => ['CSV',' +Abandon']); $db->Label(-text => "Do you wish to save a new CSV file or aba +ndon changes?")->pack(); my $button = $db->Show(); if ($button eq 'CSV'){ save_csv(); } $mw->destroy(); } sub save_csv{ return 1; } sub exit_x{ unless ($exit_pressed){ print "2"; my $check = MainWindow->new(-title=> 'Save?'); $check->Label(-text => "Do you wish to save a new CSV file + or abandon changes?")->pack(); $check->Button(-text => 'CSV', -command => sub { save_csv( +);$check->destroy();})->pack(-side=>'bottom'); $check->Button(-text => 'Abandon', -command => sub {$check +->destroy();})->pack(-side=>'bottom'); } }
However it a) isn't elegant from a code point of view, b) means that the screen (which will contain data) is closed before the option to have it is displayed and c)It will be hard to make the 2 save windows look the same.
|
|---|