Relatively new to writing Perl, I've recently come across an error that, for the life of me, I cannot figure out how to resolve when using Tk::Gauge. The issue comes when the window holding the gauge, and associated scripts, is opened, used, closed, and then re-opened within the same "session" of the script. The gauge refuses to continue working beyond that first presence.
Below is the error that Terminal is spitting out (I am running Ubuntu with 5.12.4 at the moment), followed by the actual code itself extracted from the main script.
############### # Error print # ############### prompt$ perl gaugetest2 XS_Tk__Callback_Call error:Can't use an undefined value as an ARRAY re +ference at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line 408. XS_Tk__Callback_Call error:Can't use an undefined value as an ARRAY re +ference at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line 408. Tk::Error: Can't use an undefined value as an ARRAY reference at /usr/ +local/share/perl/5.12.4/Tk/Gauge.pm line 408. Tk::Gauge::maxradius at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line + 408 Tk::Gauge::centerpoint at /usr/local/share/perl/5.12.4/Tk/Gauge.pm li +ne 398 Tk::Gauge::setvalue at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line +321 Tk::Gauge::tracew at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line 38 +3 Tk::Trace::store at /usr/lib/perl5/Tk/Trace.pm line 94 Tie::Watch::callback at /usr/lib/perl5/Tie/Watch.pm line 399 Tie::Watch::Scalar::STORE at /usr/lib/perl5/Tie/Watch.pm line 453 Tk::Widget::traceVdelete at /usr/lib/perl5/Tk/Trace.pm line 182 Tk::Gauge::delete_traces at /usr/local/share/perl/5.12.4/Tk/Gauge.pm +line 299 Tk::Gauge::ConfigChanged at /usr/local/share/perl/5.12.4/Tk/Gauge.pm +line 279 Tk::After::once at /usr/lib/perl5/Tk/After.pm line 90 [once,[{},after#11,idle,once,[ConfigChanged,{},{}]]] ("after" script) Tk::Error: Can't use an undefined value as an ARRAY reference at /usr/ +local/share/perl/5.12.4/Tk/Gauge.pm line 408. Tk::Gauge::maxradius at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line + 408 Tk::Gauge::centerpoint at /usr/local/share/perl/5.12.4/Tk/Gauge.pm li +ne 398 Tk::Gauge::setvalue at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line +321 Tk::Gauge::tracew at /usr/local/share/perl/5.12.4/Tk/Gauge.pm line 38 +3 Tk::Trace::store at /usr/lib/perl5/Tk/Trace.pm line 94 Tie::Watch::callback at /usr/lib/perl5/Tie/Watch.pm line 399 Tie::Watch::Scalar::STORE at /usr/lib/perl5/Tie/Watch.pm line 453 Tk::Widget::traceVdelete at /usr/lib/perl5/Tk/Trace.pm line 182 Tk::Gauge::delete_traces at /usr/local/share/perl/5.12.4/Tk/Gauge.pm +line 299 Tk::Gauge::ConfigChanged at /usr/local/share/perl/5.12.4/Tk/Gauge.pm +line 279 Tk::After::once at /usr/lib/perl5/Tk/After.pm line 90 [once,[{},after#12,idle,once,[ConfigChanged,{},{}]]] ("after" script) ####### # end # ####### Perl code ######### #!/usr/bin/perl -w use Tk; use Tk::Table; use Tk::Gauge; use strict; use diagnostics; my $mw = MainWindow->new; $mw->geometry("75x75"); $mw->title("Gauge testing"); my $button = $mw->Button(-text => "Null", -command => \&button3_sub)- +>pack(-anchor=>'center'); our ($alpha,$alphaone,$beta,$betaone,$mh,$output_text,$gaugevar,$cur); sub button3_sub { $mh= (35+(29-1)*6); $cur=$mh; my $hw = $mw -> Toplevel; $hw ->geometry("650x450"); $hw ->title('Health Track (!!!WARNING:DO NOT EXIT THIS WINDOW UNTIL DO +NE)'); my $hf = $hw -> Frame(-background => 'white')->pack(-ipadx => 250, -fi +ll => 'both', -expand =>'yes'); my $left_frame = $hf -> Frame (-background=>'white')->pack(-side=>'lef +t', -fill => 'y'); my $right_frame = $hf->Frame(-background=>'white')->pack(-ipadx=>150, +-fill =>'y', -anchor=>'n',-expand=>1); $betaone = $left_frame->Entry(-background => "green",)->pack( +-anchor=>'nw'); my $beta_button = $left_frame->Button(-text => "Alpha Null", - +command => \&update_output)->pack(-anchor=>'nw'); $alphaone = $left_frame->Entry(-background => "red",)->pack(- +anchor=>'nw'); my $alpha_button = $left_frame->Button(-text => "Alpha Null", +-command => \&update_output)->pack(-anchor=>'nw'); $output_text = $left_frame->Text(-height=>5,-width=>15)->pack(-expand +=>0,); my $gauge= $right_frame->Gauge( -background => 'white', -bands =>[ { -piecolor => 'green', -minimum=> 50, -maximum=> 100, -tag=> 'Healthy', }, { -piecolor => 'yellow', -minimum=> 25, -maximum=> 50, -tag=> 'Bloodied', }, { -piecolor => 'red', -minimum=> 0, -maximum=> 25, -tag=> 'Critical', } ], -bandplace => 'underticks', -bandstyle=> 'pieslice', -bandwidth=> 0, -caption => 'Current Value', -captioncolor=> 'black', -extent => -180, -from => 0, -hubcolor => 'black', -huboutline => 'blue', -hubradius => 15, -majortickinterval => 10, -majorticklabelplace =>'outside', -finetickinterval => 1, -minortickinterval => 5, -margin =>40, -needles => [ { -arrowshape => [ 12, 23, 6 ], -color => 'black', -command => undef, -format => '%d', -radius => 196, -showvalue => 1, -tag => 'null', -title => 'null', -titlecolor => 'white', -titlefont =>'Helvetica-12', -titleplace => 'south', -variable => \$gaugevar, -width => 5, } ] , -start => 180, -to => 100, )->pack(-fill=>'both',-expand=>1); ##my $gaugebutton1 = $left_frame ->Button(-text => "Update", -command +=> \&gaugebutton1_sub)->pack(-side=>'bottom'); #currently pointless. +will leave in for possible diagnostics. } sub gaugebutton1_sub { $gaugevar=($cur/$mh)*100; }#above sub redundant(?) due to &update_output# sub update_output { my $beta = $betaone->get(); my $alpja = $alphaone->get(); if ($alpha eq "") { $alpha = 0; } if ($beta eq "") { $beta = 0; } $cur=$cur+$beta-$alpha; if ($cur gt $mh){$cur=$mh;} if ($cur lt 0){$cur=0;} my $output = "Current value:\n$cur"; $output_text->delete('0.0', 'end'); $output_text->insert("end", $output); $betaone->delete('0.0', 'end'); $alphaone->delete('0.0', 'end'); $gaugevar=($cur/$mh)*100; } MainLoop; ###end
If anyone has some ideas on what's wrong, I'd love to know how to fix it. I believe it can be fixed by framing the gauge within the GUI's primary window, but I'm hoping there's a solution that'll keep me from have to do that.
In reply to Tk::Gauge errors by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |