in reply to To be continued
in thread Give me my gui back!

The snipet of code that pg posted is pretty close to the idea except, i need to be able to pause/resume/exit the 'for' loop from the gui at will..

Building on pg's example, adding pause and resume is fairly simple:

use Tk; use Tk::ProgressBar; use strict; use warnings; my $count; my $pause = 0; my $mw = new MainWindow(-title => "demo"); $mw->Button(-command => [\&a_long_process, \$count], -text => "A Long Process")->pack(); $mw->Button(-text => 'Quit', -command => sub{exit})->pack(); $mw->Button(-text => 'Pause', -command => sub{$pause = 1})->pack(); $mw->Button(-text => 'Resume', -command => sub{$pause = 0})->pack(); my $pb = $mw->ProgressBar( -from => 0, -to => 100000, -blocks => 100000, -colors => [0, 'green', 30000, 'yellow' , 60000, 'red'], -variable => \$count )->pack(); MainLoop; sub a_long_process { my $hash = {}; for (0..100000) { $hash->{$_} = $_; $count ++; $mw->update(); if ($pause) { while(1){ select(undef,undef,undef,0.1); last unless $pause; $mw->update(); } } } }

I used select for subsecond sleeping, Time::HiRes could also be used.