【问题标题】:WxWidget/WxPerl, more instances of WxApp, EVENT handlingWxWidget/WxPerl,更多WxApp实例,事件处理
【发布时间】:2016-04-09 00:14:07
【问题描述】:

我正在尝试制作一个脚本,该脚本创建一个简单的窗口(它继承自 WxApp)。窗口只包含一个按钮和一个点击事件处理程序。

问题是处理点击事件,当存在多个窗口时。如果仅存在一个窗口实例,则正确检测到事件。看来,事件总是在最后创建的窗口中正确运行。我不知道哪里可能有问题...在这个示例中,单击第一个创建的窗口中的按钮后,似乎 事件在第二个窗口中被捕获。它将“2”打印到控制台,而不是“1”。

package MyApp;
use base 'Wx::App';

use strict;
use warnings;
use Wx;
use aliased 'Widgets::Forms::MyWxFrame';

sub new {

    my $self = shift;
    $self = {};
    $self = Wx::App->new( \&OnInit );
    bless($self);

    $self->{"windowNumber"} = shift;

    my $mainFrm = MyWxFrame->new(
        undef,                     
        -1,                        
        "My app - ".$self->{"windowNumber"},
        &Wx::wxDefaultPosition
    );

    my $button = Wx::Button->new( $mainFrm, -1, "Test btn", );
    Wx::Event::EVT_BUTTON( $button, -1, sub { __OnClick( $self, @_ ) } );

    $mainFrm->Show(1);
    return $self;
}

sub OnInit {
    return 1;
}

sub __OnClick {
    my $self  = shift;
    my $btn   = shift;
    my $event = shift;

    print $self->{"windowNumber"};
}

my $myApp = MyApp->new(1);
my $myApp2 = MyApp->new(2);


$myApp->MainLoop;

【问题讨论】:

    标签: events event-handling wxwidgets wxperl


    【解决方案1】:

    您似乎对wxAppwxFrame 之间的区别感到非常困惑。第一个代表整个应用程序,并且只能是其中一个(无论如何,在非病理情况下)。要创建多个顶级窗口,创建多个wxFrames 就足够了,但是您的代码没有这样做,它实际上创建了多个wxApp 实例。

    不要这样做,创建一个wxApp,然后根据需要创建任意数量的窗口。

    【讨论】:

      猜你喜欢
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 2021-12-21
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多