我想在一个wxperl应用程序中捕捉顶层的按键。从文档来看,似乎应该使用EVT_CHAR EVT_CHAR_HOOK EVT_KEY_DOWN之一。
在下面的代码中,EVT_LEFT_DOWN可以工作,但是EVT_KEY_DOWN (或任何替代方案)不能工作。
有人知道该怎么做吗?OS,顺便说一下。
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;发布于 2020-05-14 20:47:35
如果窗口有焦点(这有点同义,但根据定义,键盘事件只发送到焦点窗口),这应该有效。在Mac下,如果您不是从一个适当的(Mac)包中运行程序,那么在刚开始的时候,框架没有焦点可能会出现问题,但是单击它仍然会使它具有焦点。如果这仍然不起作用,请尝试创建一个wxPanel作为框架的子元素,并绑定到它上的事件。
https://stackoverflow.com/questions/61803886
复制相似问题