Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4869[/thread]

Progressbar und globale Variablen (Seite 2)



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
pktm
 2005-03-15 02:03
#42917 #42917
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, das hatte ich probiert, aber der Fehler ging nicht weg.
Irgendwie wird $status_var resettet...
Code: (dl )
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/Perl/bin/perl

use strict;
use warnings;
use Data::Dumper;
use Tk;
use Tk::ProgressBar;

# Settings:
my $status_var = 100;
my $blks = 10;
my $dir = 'w';
my $res = 0;
my $fromv = 0;
my $tov = 100;
my %timer = (); # Behälter für alle Timer

my $mw = Tk::MainWindow->new(-width=>100,-height=>80,);
$mw->packPropagate(0);

my $pb = $mw->ProgressBar(
-borderwidth => 2,
-relief => 'sunken',
-width => 20,
-padx => 2,
-pady => 2,
-variable => \$status_var,
-value => 0,
-colors => [0 => 'green', 50 => 'yellow' , 80 => 'red'],
-resolution => $res,
-blocks => $blks,
-anchor => $dir,
-from => $fromv,
-to => $tov
)->pack();
# $blks = abs($blks - ($res * 2));
# $res = abs(5 - $res);

print "sv: '$status_var'\n";
my $b = $mw->Button( -text => 'start / stop', -command=> sub{ startstop($pb, $status_var, $fromv, $tov, \%timer) }, )->pack();

MainLoop;

sub startstop {
my ($pb, $status_var, $fromv, $tov, $timer) = @_;
if( exists $timer{counter} ){
$timer{counter}->cancel;
delete $timer{counter};
}else{
$timer{counter} = $pb->repeat(500, sub{ setUpPb($status_var, $fromv, $tov) }, );
}
} # /startstop

sub setUpPb {
my ($status_var, $fromv, $tov) = @_;
if( $status_var < $tov ){
$status_var++;
}else{
$status_var = $fromv;
}
} # /setUpPb
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-03-15 14:45
#42918 #42918
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Teste mal:
Code: (dl )
1
2
3
4
5
my $b = $mw->Button(
 -text => 'start / stop',
 -command => [ \&startstop, $pb, $status_var, $fromv, $tov, \%timer ],
  )
 ->pack();
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-03-15 16:45
#42919 #42919
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das bringt leider keine Änderung.
Habe es jetzt mal auf einer anderen Perl-Installation getestet (also auf einem anderen PC, selbe Versionen) und es kam der selbe fehler.
Angeblich ist $status_var nicht definiert und der Statusbalken regt sich im gegensatz zu der ersten (oben stehenden) Version nicht einmal...
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-03-15 17:29
#42920 #42920
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Uebergebe $status_var als Referenz, dann bekommt das Hauptprogramm das ++ auch mit...
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
my $b = $mw->Button( -text => 'start / stop',
-command=> [ \&startstop, $pb, \$status_var, $fromv,

$tov, \%timer ],
....
sub setUpPb {
my ($status_var, $fromv, $tov) = @_;

if( $$status_var < $tov ){
$$status_var++;
}else{
$$status_var = $fromv;
}
} # /setUpPb

sonst erhoehst du zwar den Wert von $status_var lokal, aber das interessiert ausserhalb der sub niemanden... sorry, haette gleich genauer hinschauen sollen
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-03-15 20:58
#42921 #42921
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hm, das Parameterauslesen in einer SUb gleicht also einer local-Definition der Variablen?
Irgendwie ja auch logisch, da sie mit my () = @_; gemacht wird...
Da wäre ich jetzt nicht drauf gekommen.

Was mich noch beunruhigt ist, dass das print "sv: '$status_var'\n"; nach der Instanzierung von Tk::ProgressBar meckert, dass $status_var undef wäre.
Dabei steht doch oben dass der Wert 0 sein soll.
Es liegt auch kein Typo vor...
Das muss mit der Referenzierung des ProgressBars zusammen hängen.
http://www.intergastro-service.de (mein erstes CMS :) )
Strat
 2005-03-16 18:26
#42922 #42922
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
solange du mit $_[0] $_[1] usw. arbeitest, hast du call by reference; erst wenn du es herauskopierst (my ($x, $y) = @_); hast du (in $x, $y) call by value...
Und da wohl niemand mit $_[0] usw. direkt arbeiten will (auch wenn es moeglich waere), ist die uebergabe per Referenz IMHO schoener...

Das Problem mit dem $status_var, die undef ist, kann ich nicht nachvollziehen. Bei mir ist da nichts undef
Code: (dl )
1
2
L:\temp>perl -e "use Tk::ProgressBar;print $Tk::ProgressBar::VERSION"
3.014
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2005-03-16 23:18
#42923 #42923
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
4.010
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-03-10 18:42.