#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::Pane; my $mw = MainWindow->new(); $mw->geometry("100x100"); $mw->Button( -text => "START", -command => \&start_computation )->pack; MainLoop; sub start_computation { my $progress = $mw->Toplevel(); $progress->geometry("100x100"); my $pane = $progress->Scrolled( 'Pane', -scrollbars => 'soe', -sticky => 'we', -gridded => 'y' )->pack( -fill => 'both', -expand => 1 ); my $text = "Computation started...\n"; $pane->Frame; my $label = $pane->Label( -text => $text )->pack( -side => 'left', -fill => 'x' ); # doing several computation steps foreach my $step ( 1 .. 10 ) { sleep(1); $text .= "Step $step finished.\n"; $label->destroy; $label = $pane->Label( -text => $text )->pack( -side => 'left' ); $pane->update; } $text .= "\nComputation finished.\n"; $label->destroy; $label = $pane->Label( -text => $text )->pack( -side => 'left' ); $pane->update; $pane->Button( -text => "QUIT", -command => sub { exit; } )->pack; }