В общем, потребовалось к программке добавить прогресс бар. И все бы хорошо, но проблема в том что йентот прогресс бар почему-то не хочет обновлятся в режиме реального времени - а просто после выполнения задачи - рисует полосочку. Но уже ПОСЛЕ выполнения. :\\\\.. Как заставить ее отображать реальность - а не прошедшее время?
Для простоты понимания - набросал тестовый скриптик. Тут рисуется пару окошек, и пару кнопок. На кривизну не обращайте внимание - это для примера.
#!perl -w
use Tk;
use Tk::ProgressBar;
use Tk::Toplevel;
my $val=1;
$mw = MainWindow->new();
$mw->geometry( \'250x150\' );
$mw->resizable( 1, 0 );
$mw->Button(-text=>"add",-command=>\\&Add)->pack( -padx=>15, -pady=>15,
-anchor=>\'se\' );
sub Add {
my $toplevel=$mw->Toplevel();
my $but=$toplevel->Button(-text=>\'Add\')->pack( -padx=>15, -pady=>15,-anchor=>\'se\' );
my $but2=$toplevel->Button( -text=>\'Quit\', -command=>sub{ $toplevel->destroy() } )->pack( -padx=>15, -pady=>15, -anchor=>\'se\' );
my $bar = $toplevel->ProgressBar( -padx=>2, -pady=>2, -borderwidth=>2,-blocks => 18,
-troughcolor=>\'#BFEFFF\', -colors=>[ 0, \'#104E8B\' ],
-length=>106,-variable=>\\$val)->pack;
my $bar2 = $toplevel->ProgressBar( -padx=>2, -pady=>2, -borderwidth=>2,-blocks => 18,
-troughcolor=>\'#BFEFFF\', -colors=>[ 0, \'#104E8B\' ],
-length=>106,-variable=>\\$val)->pack;
$but->configure( -command=>[ \\&fct] );
}
MainLoop;
sub fct {
while($val<100) {
$val++;
Addz($val);
}
}
sub Addz {
my $val2=shift;
$val2=5000+$val2;
for(;$val2>1 ; ) {
$val2--;
my $data=localtime()
}
}
Функция Addz - просто несет нагрузку - ничего более (для того чтобы понять что прогресс бар появляется потом а не во время выполнения).
Я пробовал работать с прогрессбаром и через опцию -variable, и через метод
$bar->value($num);
результат один и тот же.
Подскажите плиз как быть?