在 wxperl 中捕获关键事件
Catching key event in wxperl
我想在 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;
如果 window 有焦点,这应该有效(这有点重复,但根据定义,键盘事件只发送给焦点 window)。在 Mac 下,如果您不是来自适当 (Mac) 包的 运行 程序,您可能会遇到框架最初没有焦点的问题,但单击它仍然会提供它焦点。如果这仍然不起作用,请尝试创建一个 wxPanel
作为框架的子级并绑定到其上的事件。
我想在 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;
如果 window 有焦点,这应该有效(这有点重复,但根据定义,键盘事件只发送给焦点 window)。在 Mac 下,如果您不是来自适当 (Mac) 包的 运行 程序,您可能会遇到框架最初没有焦点的问题,但单击它仍然会提供它焦点。如果这仍然不起作用,请尝试创建一个 wxPanel
作为框架的子级并绑定到其上的事件。