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



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

当存在多个窗口时,问题是处理单击事件。如果只存在一个窗口实例,则事件检测正确。似乎,事件总是在上次创建的窗口中正确运行。我不知道哪里可能有问题。。。在这个示例中,在第一个创建的窗口中单击按钮后,第二个窗口中似乎捕捉到了thet事件。它将"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;

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

不要这样做,创建一个wxApp,然后根据需要创建尽可能多的窗口。

相关内容

  • 没有找到相关文章

最新更新