in reply to Entry widget questions

I'll throw another into the mix...

#!perl use warnings; use strict; use Tk; my @mac = ( 32, 42 ); my $mw = MainWindow->new(); my $font = 'Courier 18 bold'; my @mac_entry; for ( 0 .. 5 ) { $mac_entry[$_] = $mw->Entry( -textvariable => \$mac[$_], -width => 2, -font => $font, -validate => 'all', -validatecommand => \&valid, -invalidcommand => [ sub { invalid( $_[0] ) }, $_ ] )->pack( -side => 'left' ); $mac_entry[$_]->bind( '<KeyRelease>', [ sub { if ( $mac[ $_[1] ] =~ /^[0-9a-f]{2}$/i ) { $mac_entry[ $_[1] + 1 ]->focus if defined $mac_entry[ $_[1] + 1 ]; } }, $_ ] ); } sub valid { $_[0] =~ /^[0-9a-f]{0,2}$/i } sub invalid { my $index = shift; my $widget = $mac_entry[$index]; $widget->bell; my $background = $widget->cget('-background'); $widget->configure( -background => 'red' ); $widget->update; $widget->after( 250, sub { $widget->configure( -background => $background ) } ); } $mac_entry[0]->focus; MainLoop;

Replies are listed 'Best First'.
Re^2: Entry widget questions
by snotnose (Novice) on Feb 15, 2007 at 18:36 UTC
    Hey, thanks guys. I should be able to make this work.
    I like the for (0 .. 5) syntax, that's sweet! When I learned Python a few years back it took about 6 months until I was writing Python, instead of C code in Python syntax. I suspect perl will be the same.
    I've got 3 frames, I just pulled the entry widget out for my code to use as an example.
    I wanted to make validate and invalid subroutines, but didn't know how to get at the underlying widget. Thanks for showing me how!

    1 more question. Where did you guys learn this stuff? The available docs don't seem to help a whole lot for this kind of (what I presume is common) stuff.

      All the monks who answered, regularly read all daily posts at perlmonks, and the newsgroup comp.lang.perl.tk, and save good examples which we see. These questions come up so often, that we have a good collection of scripts which we can use to impress new users. :-) But we have no special powers, just tedious methodical study day after day. You can do it too. Often, if you know the right words to google for, you can go to groups.google.com and search comp.lang.perl.misc or comp.lang.perl.tk and search for answers yourself. For instance, for your question you might search for "entry focus" and/or "entry validate", and you will find most of the code which we have shown ( or close).

      I'm not really a human, but I play one on earth. Cogito ergo sum a bum

      The book "Mastering perl/TK" has a lot of good info in it that helped me a lot. Its also available in the O'Reilly "Perl CD bookshelf edition 3" in electronic form. It can also be viewed online at FreeComputerBooks.com under Languages-Perl.

      -Eugene