Progress Bar активизирует Perl Win32 :: GUI - PullRequest
0 голосов
/ 23 марта 2012

Я разрабатываю настольное приложение с использованием perl Win32 :: GUI. В этом я использую Progress Bar для идентификации статуса. Я установил максимальный уровень индикатора выполнения как 100. В этом я увеличиваю значение согласно длине. Я написал пример кода ниже. Я рассчитываю значение шага путем деления 100 на длину ввода. При этом, если длина ввода нечетное число, значение шага будет с плавающей точкой. Следовательно, индикатор выполнения не завершил свой максимальный уровень полностью. Например, если длина равна 11, значение шага будет 9,09. Индикатор выполнения принимает это только как 9. Итак, уровень прогресса завершен всего на 99 сегментах. Не 100. Пожалуйста, поделитесь своими предложениями.

use strict;
use Win32;
use Win32::GUI;

my $DOS = Win32::GUI::GetPerlWindow();                   
Win32::GUI::Hide($DOS);

my $Upload_win=Win32::GUI::Window->new(
        -name => 'UploadWindow',
        -text => 'SVN-CHIP-Upload-Tool-V2-HurixSystems',
        -left => 375,
        -top  => 400,
        -width =>520,#370,
        -height =>520,
        #-menu =>$Menu,
        -background => [190,190,190],
        -dialogui   => 1,
        -maximizebox => 0,
);

my $ProcessButton=$Upload_win->AddButton(
        -text => 'Upload',
        -name =>  'uploadbut',
        -size => [90,25],
        -pos  =>  [200,360],
        -background =>  [190,190,190],
        -foreground => [],
        -tabstop => 1,
);
my $Progress_bars=$Upload_win->AddProgressBar(
  -pos=>[20,400],
  -background=>[0,255,85],
  -smooth   => 1,
  -size=>[470,20],

);

$Upload_win->Show();
Win32::GUI::Dialog();
Win32::GUI::Hide($DOS);

sub uploadbut_Click{

  $Progress_bars->SetRange(0,100);
  my $x=11;
  my $y=100/$x;
  for(1..$x){
  Win32::GUI::DoEvents() >= 0;
   $Progress_bars->SetStep($y);
   $Progress_bars->StepIt();
   sleep 1;
  }
}

1 Ответ

2 голосов
/ 18 сентября 2012

Вы можете установить длину индикатора выполнения для продукта ваших шагов и размера шага:

#!perl

use strict;
use Win32;
use Win32::GUI();

my $DOS = Win32::GUI::GetPerlWindow();                   
Win32::GUI::Hide($DOS);

my $Upload_win=Win32::GUI::Window->new(
    -name => 'UploadWindow',
    -text => 'SVN-CHIP-Upload-Tool-V2-HurixSystems',
    -left => 375,
    -top  => 400,
    -width => 520,
    -height =>520,
    -background => [190,190,190],
    -dialogui   => 1,
    -maximizebox => 0,
);

my $ProcessButton=$Upload_win->AddButton(
    -text => 'Upload',
    -name =>  'uploadbut',
    -size => [90,25],
    -pos  =>  [200,360],
    -background =>  [190,190,190],
    -foreground => [],
    -tabstop => 1,
);
my $Progress_bars=$Upload_win->AddProgressBar(
    -pos=>[20,400],
    -background=>[0,255,85],
    -smooth   => 1,
    -size=>[470,20],
);

$Upload_win->Show();
Win32::GUI::Dialog();
Win32::GUI::Hide($DOS);

sub uploadbut_Click{
    my $intended_max = 100;
    my $x = 11;
    my $y = int($intended_max/$x);

    $Progress_bars->SetRange(0,$x*$y);

    for(1 .. $x){
        Win32::GUI::DoEvents();
        $Progress_bars->SetStep($y);
        $Progress_bars->StepIt();
        Win32::Sleep(1000);
    }
}
...