Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Events WxWidget/WxPerl,更多WxApp实例,事件处理_Events_Event Handling_Wxwidgets_Wxperl - Fatal编程技术网

Events WxWidget/WxPerl,更多WxApp实例,事件处理

Events WxWidget/WxPerl,更多WxApp实例,事件处理,events,event-handling,wxwidgets,wxperl,Events,Event Handling,Wxwidgets,Wxperl,我正在尝试创建一个脚本,它创建了一个以上的简单窗口(它继承自WxApp)。窗口仅包含单击事件的一个按钮和处理程序 当存在多个窗口时,问题是如何处理单击事件。如果只存在窗口的一个实例,则正确检测事件。看起来,事件总是在上次创建的窗口中正确运行。我不知道哪里会有问题。。。在这个示例中,在单击第一个创建的窗口中的按钮后,似乎在第二个窗口中捕捉到了事件。它将“2”打印到控制台,而不是“1” 您似乎被wxApp和wxFrame之间的差异搞糊涂了。第一个代表整个应用程序,并且只能有一个(无论如何,在非病理情

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

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


您似乎被
wxApp
wxFrame
之间的差异搞糊涂了。第一个代表整个应用程序,并且只能有一个(无论如何,在非病理情况下)。要创建多个顶级窗口,只需创建多个
wxframe
,但您的代码无法做到这一点,它实际上会创建多个
wxApp
实例

如果不这样做,请创建一个
wxApp
,然后根据需要创建多个窗口

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;