1

我想在 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;

4

1 回答 1

2

如果窗口有焦点,这应该可以工作(这有点重复,但根据定义,键盘事件只发送到焦点窗口)。在 Mac 下,如果您没有从正确的 (Mac) 捆绑包中运行程序,您可能会遇到框架最初没有焦点的问题,但单击它仍应为其提供焦点。如果这仍然不起作用,请尝试创建 awxPanel作为框架的子框架并绑定到其上的事件。

于 2020-05-14T20:47:35.420 回答