in reply to Perl Tk exit the main window after 5 seconds...

Use a timer to destroy the mainwindow. If you need the script to continue on, destroy the mainwindow, instead of exiting, then you can run more commands after the Tk window is gone, leaving you with the default answer.
#!/usr/bin/perl use warnings; use strict; use Tk; my $choice; my $mw = new MainWindow(-height => 600,-width => 600 ,-title=>"Message +"); # Main Window $mw->overrideredirect(1); # Remove window manager controls $mw->geometry('+700+650'); my $frm_name = $mw -> Frame() -> pack(); my $lab; if ($ARGV[0] eq "-A"){ $lab = $frm_name -> Label( -text=>"D[$ARGV[1]]\nClick 'Ok' To start the Process", -anchor => 'center',-height => 5,-width=> 55 , -foreground => 'blue', ) -> pack(); $mw -> Button(-text=>"Ok", -command =>sub { my $status = $mw -> messageBox( -message=>"Do u want to start the process..?", -type=>'yesno',); if($status eq "Yes") { $choice = "Yes"; print "$choice\n"; exit; }else{ $choice = "No"; } } ) -> pack(-side =>'right',-expand => 0); $mw -> Button(-text=>"Cancel", -command =>sub { print"cancel"; exit;}) + -> pack(-side =>'right',-expand => 0 ); } my $timer = $mw->after(5000, sub{ $choice = 'No'; print "$choice\n"; $ +mw->destroy; } ); MainLoop; print "after mainloop exits-> $choice\n";

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku

Replies are listed 'Best First'.
Re^2: Perl Tk exit the main window after 5 seconds...
by Anonymous Monk on Aug 09, 2010 at 12:59 UTC
    Thanks your replay.... I have clicked the ok button then the yes/no dialog box is opened and this program exit with some necessary data? how to destroy the message box also.
      sorry.. unnecessary data.
        The problem is messageBox is a special kind of window that grabs the screen. If you make it a transient, as shown below, it works, but some Tk errors will get printed as you destroy the mainwindow, because the messagBox still has a screen grab. If the below changes are not workable for you because of the Tk dump of destroy errors, then consider using a plain toplevel window instead of a messageBox.
        my $status = $mw -> messageBox( -message=>"Do u want to start the process..?", -type=>'yesno',); if($status eq "Yes") { $choice = "Yes"; print "$choice\n"; exit; }else{ $choice = "No"; } } ) -> pack(-side =>'right',-expand => 0); $status->transient($mw); # will work, but causes harmless errors repo +rted

        I'm not really a human, but I play one on earth.
        Old Perl Programmer Haiku