$mw->after(1, sub {&startup()}); MainLoop; #### #!/usr/bin/perl use warnings; use strict; use Tk; my $mw = tkinit; my $textbox = &do_Toplevel(); #to wait until a $widget is visible, use waitVisibility: $mw->waitVisibility; #your long startup code, telling it which textbox to display in #&startup($textbox); &startup1($textbox); MainLoop; ################################################################# sub do_Toplevel { my $tl = $mw->Toplevel(); $tl->title( "Early Status" ); my $text = $tl->Scrolled('Text')->pack(); $text->insert('end',"........startup messages.........\n"); $tl->Button( -text => "Close", -command => sub { $tl->withdraw } )->pack; return $text; } ############################################################## sub startup{ my $textbox = shift; foreach my $num (1..10){ $textbox->insert('end',"$num\n"); $textbox->update; sleep 1; } } ################################################################## sub startup1{ my $textbox = shift; $|++; tie *STDOUT, 'Tk::Text', $textbox; #may need this to force repeated updates # $mw->repeat(10,sub{ $textbox->update }); foreach my $num (1..10){ print "$num\n"; # printing to STDOUT $textbox->update; sleep 1; } } __END__