在wxperl中捕捉关键事件

问题描述 投票:0回答: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;

perl wxwidgets wxperl
1个回答
2
投票

如果窗口有焦点,这应该可以工作 (这有点同义反复,但是,根据定义,键盘事件只被发送到有焦点的窗口)。在Mac下,如果你不是从一个合适的(Mac)捆绑程序中运行,你可能会遇到框架最初没有焦点的问题,但点击它仍然应该给它焦点。如果这样还是不行,请尝试创建一个 wxPanel 作为框架的子代,并与框架上的事件绑定。

© www.soinside.com 2019 - 2024. All rights reserved.