$fill_x->configure(-command => sub { $_->configure(-state => 'disabled') for $fill_x, $fill_y; my $ms = 50 * (1 + int rand 10); my $iters = 1 + int rand 100; my $iter = 0; my $id; my $label = 'LABEL'; $id = $mw->repeat($ms, sub { if (++$iter <= $iters) { text_show($text, sprintf "\r%s%4d/%4d [%s]", $label, $iter, $iters, '=' x $iter ); } else { text_show($text, "\nDone!\n"); $id->cancel; $_->configure(-state => 'normal') for $fill_x, $fill_y; } }); });