in reply to Re: Can a sublcass of Wx::StaticBoxSizer handle events in wxPerl?
in thread Can a sublcass of Wx::StaticBoxSizer handle events in wxPerl?

Thanks for the guidance. Unfortunately, I tried your suggestion and now my control isn't even displaying correctly. Any ideas?

package my_control; use base 'Wx::Control'; use Wx qw(:sizer); use Wx::Event qw(EVT_BUTTON); sub new { my $ref = shift; my $parent = shift; my $self = $ref->SUPER::new($parent, -1); $self->{sizer} = Wx::StaticBoxSizer->new( Wx::StaticBox->new($parent, -1, 'Box label'), wxHORIZONTAL ); $self->{button} = Wx::Button->new($parent, -1, 'Button'); $self->{sizer}->Add($self->{button}); EVT_BUTTON($self, $self->{button}, \&click); $self->SetSizer($self->{sizer}); $self->{sizer}->SetSizeHints($self); $self->{sizer}->FitInside($self); return $self; } sub click { Wx::MessageBox('Click!'); }

(If you can't tell, I'm new to both wxPerl and Perl objects.)

Thanks again.

  • Comment on Re^2: Can a sublcass of Wx::StaticBoxSizer handle events in wxPerl?
  • Download Code

Replies are listed 'Best First'.
Re^3: Can a sublcass of Wx::StaticBoxSizer handle events in wxPerl?
by ikegami (Patriarch) on Jun 23, 2010 at 18:01 UTC
    I don't see any problems from a visual inspection of the code, although I'm not fluent in Wx. I don't have Wx installed here to see the result for myself. How do you display it? What's not correct with how it's being displayed?

      Here's my entire script (after a few more tweaks). It's only displaying the button, without any static box around it.

      #!perl use strict; use warnings; use Wx; package my_control; use base 'Wx::Control'; use Wx qw(:sizer :misc :id); use Wx::Event qw(EVT_BUTTON); sub new { my $ref = shift; my $parent = shift; my $self = $ref->SUPER::new($parent, wxID_ANY, wxDefaultPosition, +wxDefaultSize); $self->{sizer} = Wx::StaticBoxSizer->new( Wx::StaticBox->new($self, -1, 'Box label'), wxHORIZONTAL ); $self->{button} = Wx::Button->new($self, -1, 'Button'); $self->{sizer}->Add($self->{button}, 1, wxEXPAND | wxALL, 10); EVT_BUTTON($self, $self->{button}, \&click); $self->SetSizerAndFit($self->{sizer}); return $self; } sub click { Wx::MessageBox('Click!'); } package my_frame; use base 'Wx::Frame'; use Wx qw(:sizer); sub new { my $ref = shift; my $self = $ref->SUPER::new(undef, -1, 'Title', [-1, -1], [150,150 +]); my $panel = Wx::Panel->new($self, -1); my $sizer = Wx::BoxSizer->new(wxVERTICAL); my $control = my_control->new($panel); $sizer->Add($control, 1, wxEXPAND); $panel->SetSizerAndFit($sizer); return $self; } package my_app; use base 'Wx::App'; sub OnInit { my_frame->new()->Show(1); } package main; my_app->new()->MainLoop;

      (The event is working now, by the way.) Thanks a lot for your help.

        Looks ok to me too. Sorry, I can't help.

        By the way, I think

        my $panel = Wx::Panel->new($self, -1); my $sizer = Wx::BoxSizer->new(wxVERTICAL); my $control = my_control->new($panel); $sizer->Add($control, 1, wxEXPAND); $panel->SetSizerAndFit($sizer); return $self;
        can be simplified to
        my $sizer = Wx::BoxSizer->new(wxVERTICAL); my $control = my_control->new($self); $sizer->Add($control, 1, wxEXPAND); $self->SetSizerAndFit($sizer); return $self;