in reply to Re: Is the problem JComboBox, Perl/Tk or (probably) me!?
in thread Is the problem JComboBox, Perl/Tk or (probably) me!?
AND###########################################!/usr/bin/perl -w use Tk; my $xx=99; sub a{ my $x=$_[0]; my $wm= new MainWindow; my $l=$wm->Entry(-textvariable => \$x)->pack(); $wm->Button(-text => "Apply", # -command => [ \&onApply, "$x"])->pack(); -command => [ \&onApply, \$x])->pack(); } # Here, you specify an anonymous list as the value of the -command opt +ion, # which is a legal callback syntax. The problem is that this list will + be # created when the button is created, and the first element in the lis +t is # the reference to onApply(), but the second element is the *value* of + $x # at the time the list is created, which is the initial value of $x. T +he # variable $x itself has nothing to do with it anymore, so changing it + # will not change this anonymous list. # What you can do is pass a reference to $x instead: # -command => [\&onApply, \$x], # and change your onApply() sub to reflect that. sub onApply{ # my $z=$_[0]; my $z = ${$_[0]}; print "XX=$z\n"; }; &a($xx); MainLoop();
#!/usr/bin/perl #for example the following is wrong my $row = 0; my $column = 0; for (my $i = 9; $i >= 0; $i--) { $button{$i} = $mw->Button(-text => "$i", -width => '3', -height => '1', -command => &numpress($i)) ->grid(-row => $row, -column => $column); $column++; if($column > 2){$column = 0; $row++;} } MainLoop; ####################################################### # Now the problem is here: -command => &numpress($i)) # The thing being assigned to the "-command" attribute needs # to be an anonymous subroutine, a reference to a named subroutine, # or else a reference to an array whose elements are: # named_subroutine_ref, arg1(, arg2 ...) -- in other words, # either of the following would be the right way to do what you want: -command => sub { numpress( $i ) } # or -command => [ \&numpress, $i ] #The way you had it written, your subroutine is actually being called + #when the Button is being created, and Perl/Tk is trying to use the #return value of the sub as the value for "-command" -- not good.
|
|---|