Forum Webscript.Ru

Программирование => Perl => Тема начата: cr4ck3r от 22 Апреля 2005, 10:52:46

Название: Вопрос к мастерам Perl/Tk под Win32
Отправлено: cr4ck3r от 22 Апреля 2005, 10:52:46
В общем, потребовалось к программке добавить прогресс бар. И все бы хорошо, но проблема в том что йентот прогресс бар почему-то не хочет обновлятся в режиме реального времени - а просто после выполнения задачи - рисует полосочку. Но уже ПОСЛЕ выполнения. :\\\\.. Как заставить ее отображать реальность - а не прошедшее время?

Для простоты понимания - набросал тестовый скриптик. Тут рисуется пару окошек, и пару кнопок. На кривизну не обращайте внимание - это для примера.


#!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);
результат один и тот же.
Подскажите плиз как быть?
Название: Вопрос к мастерам Perl/Tk под Win32
Отправлено: cr4ck3r от 25 Апреля 2005, 09:20:19
Все - проблема решена. Надо использовать метод update. Кстати я нашел книгу "Mastering Perl/Tk"  - кого интересует эта тема пишите.
Название: Вопрос к мастерам Perl/Tk под Win32
Отправлено: Inecs от 22 Августа 2005, 18:17:34
Гдебы взять эту книжечку?
Название: Вопрос к мастерам Perl/Tk под Win32
Отправлено: cr4ck3r от 23 Августа 2005, 10:21:46
>>Здесь<< (http://poizon.net.ru/?s=4;f=6)
Название: Вопрос к мастерам Perl/Tk под Win32
Отправлено: MaksimL от 24 Октября 2006, 16:48:15
use strict;
use Tk;

use Tk::ProgressBar;

my $parent = MainWindow->new(-title => \'Save\');

my $percent_done = 0;
my $position = 10;

my $progress = $parent->ProgressBar(
    -width => 20,
    -length => 200,
    #-anchor => \'s\',
    -from => 0,
    -to => 100,
    -blocks => 10,
    -colors => [0, \'green\', 50, \'yellow\' , 90, \'red\'],
    #-variable => \\$percent_done
)->pack();


my $ida = $parent->repeat(500, \\&_repeat);

MainLoop;


sub _repeat{
   $progress->value($position);

   if(($position += 10) > 100){
      $parent->afterCancel($ida);
   }
}