in reply to Re: perl/Tk Entry validation
in thread perl/Tk Entry validation

Sorry for this lack of courtesy. Posting the complete example is indeed a good practice. I'll stick to it. Based on your example I tried the following code to add the boundaries as arguments of the validate subroutine. I cannot figure out how to reference the input value in the -validatecommand. I have tried $_, $_[0] and $xVConsSflEmbMax but none seems to work...
use strict; use Tk; my $xVConsSflEmbMax0 = 1.0; my $xVConsSflEmbMax = $xVConsSflEmbMax0; my $mw = new MainWindow(); my $entry = $mw->Entry( -textvariable => \$xVConsSflEmbMax, -width => 3, -validate => 'focusout', -validatecommand => [\&validSub,$_[0],0,1], -invalidcommand => sub {$xVConsSflEmbMax=$xVConsSflEmbMax0}, ) -> pack; MainLoop; sub validSub { my ($val,$min,$max) = @_; $val ||= 0; $min ||= -1E10; $max ||= 1E10; if( $val !~ /^\d*\.?\d+$/ ) { return 0 } elsif (($val >= $min) and ($val <= $max)) {return 1} else { return 0 } }

Replies are listed 'Best First'.
Re^3: perl/Tk Entry validation
by choroba (Cardinal) on Jul 24, 2012 at 13:09 UTC
    As you might have noticed in the documentation or in the example above, you do not have to send any arguments to validatecommand. They are sent automatically.
      Actually the question is not really if it is NECESSARY to pass some arguments to the validate command but if it is POSSIBLE - just as it is done in the case of any other command using a subroutine reference with arguments in a list. Remember I want to set the boundaries as parameters of the validation process.
        If you use the annonymous array syntax, the listed arguments will be prepended to the standard argument list.