首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WxWidget/WxPerl,更多的WxApp实例,事件处理

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

Stack Overflow用户
提问于 2016-01-05 08:26:35
回答 1查看 61关注 0票数 0

我正在尝试创建一个脚本,它创建的比一个简单的窗口(它是从WxApp继承的)更多。窗口只包含一个单击事件的按钮和处理程序。

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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 13:08:14

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

不要这样做,创建一个wxApp,然后创建您需要的多少窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34607145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档