我想在wxperl应用程序中捕获顶层的按键。EVT_CHAR EVT_CHAR_HOOK EVT_KEY_DOWN
.
在以下代码中: EVT_LEFT_DOWN
工作,但 EVT_KEY_DOWN
(或任何一个替代品)都没有。
有谁知道该怎么办?顺便说一下,OS X。
use warnings;
use strict;
use Wx;
package MyApp;
use base 'Wx::App';
use Wx::Event
qw(EVT_LEFT_DOWN EVT_CHAR EVT_CHAR_HOOK EVT_KEY_DOWN);
sub OnInit {
my( $self ) = @_;
my $frame = Wx::Frame->new(
undef,
-1,
'Hello World',
[-1, -1],
[250, 150],
);
EVT_KEY_DOWN( $frame, \&on_event ); # doesn't work
# EVT_LEFT_DOWN( $frame, \&on_event ); # works
$frame->Show( 1 );
return 1;
}
sub on_event {
print "peekaboo\n";
}
package main;
my $app = MyApp->new;
$app->MainLoop;
如果窗口有焦点,这应该可以工作 (这有点同义反复,但是,根据定义,键盘事件只被发送到有焦点的窗口)。在Mac下,如果你不是从一个合适的(Mac)捆绑程序中运行,你可能会遇到框架最初没有焦点的问题,但点击它仍然应该给它焦点。如果这样还是不行,请尝试创建一个 wxPanel
作为框架的子代,并与框架上的事件绑定。