Maybe someone knows a better answer, but my understanding is that the Frame is a no frill container widget, and dosn't have the builtin internal bindings to respond to keys. Focus is the important concept, read "perldoc Tk::focus". Usually one binds to the $mw (toplevel) and sets the focus order of the widgets it holds.
This first script shows the simplicity of the frame, notice no @_ is passed thru
#!/usr/bin/perl
use Tk;
my $main = new MainWindow;
my $f = $main->Frame(-width => 100, -height => 100)->pack;
$f->bind('<Key>' => sub {print "Key: @_\n"} );
$f->bind('<Enter>' => sub { print "enter @_\n" } );
$f->bind('<Leave>' => sub { print "leave @_\n" } );
$f->focus;
MainLoop;
and here is a way around the problem
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
my $mw = MainWindow->new;
my $f = $mw->Frame(-width => 100, -height => 100)->pack;
#$mw->bind( '<KeyPress>' => \&print_keysym );
$f->bind( '<KeyPress>' => \&print_keysym );
$mw->Button(
-text => 'Exit',
-command => sub { exit(); }
)->pack;
#button gets the default window focus, so we need
# to give it to the frame
$f->focus; # won't work without this
MainLoop;
sub print_keysym {
my $widget = shift;
my $e = $widget->XEvent;
my ( $keysym_text, $keysym_decimal ) = ( $e->K, $e->N );
print "keysym=$keysym_text, numberic=$keysym_decimal\n";
}
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.