Автор Тема: Вопрос к мастерам Perl/Tk под Win32  (Прочитано 4145 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Вопрос к мастерам Perl/Tk под Win32
« : 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);
результат один и тот же.
Подскажите плиз как быть?
« Последнее редактирование: 22 Апреля 2005, 11:52:03 от cr4ck3r »
Ворота в perl - perlmonks.org.ru

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Вопрос к мастерам Perl/Tk под Win32
« Ответ #1 : 25 Апреля 2005, 09:20:19 »
Все - проблема решена. Надо использовать метод update. Кстати я нашел книгу "Mastering Perl/Tk"  - кого интересует эта тема пишите.
Ворота в perl - perlmonks.org.ru

Оффлайн Inecs

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 48
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.amorphis-dg.da.ru
Вопрос к мастерам Perl/Tk под Win32
« Ответ #2 : 22 Августа 2005, 18:17:34 »
Гдебы взять эту книжечку?

Оффлайн cr4ck3r

  • Фанат Perl
  • Постоялец
  • ***
  • Сообщений: 146
  • +0/-0
  • 2
    • Просмотр профиля
    • http://perlmonks.org.ru
Вопрос к мастерам Perl/Tk под Win32
« Ответ #3 : 23 Августа 2005, 10:21:46 »
Ворота в perl - perlmonks.org.ru

Оффлайн MaksimL

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Вопрос к мастерам Perl/Tk под Win32
« Ответ #4 : 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);
   }
}

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28