Hi ... I am trying to learn wxperl and wxglade.. the code is not completed .. Now, I have button Add which calls add_alert sub which in turn shows a dailog after receiving the value it passes to add sub .. in the add sub I have a problem with updating the textfield in the main frame..
the error is : Can't call method "SetLabel" on an undefined value at C:/Users/ali/workspace/Test/Perl.pl line 176.
here is the code:

#!/usr/bin/perl -w -- use Wx 0.15 qw[:allclasses]; use strict; package MyFrame; use Wx qw[:everything]; use base qw(Wx::Frame); use strict; my @numbers = qw/1 2/; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_ +; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; # begin wxGlade: MyFrame::new $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $sty +le, $name ); $self->{Add} = Wx::Button->new($self, -1, "add"); $self->{Remove} = Wx::Button->new($self, -1, "remove"); $self->{Exit} = Wx::Button->new($self, -1, "exit"); $self->{text_ctrl_1} = Wx::TextCtrl->new($self, -1, "@numbers", wx +DefaultPosition, wxDefaultSize, wxTE_READONLY); $self->__set_properties(); $self->__do_layout(); Wx::Event::EVT_BUTTON($self, $self->{Add}->GetId, \&add_alert); Wx::Event::EVT_BUTTON($self, $self->{Remove}->GetId, \&remove); Wx::Event::EVT_BUTTON($self, $self->{Exit}->GetId, \&exit); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyFrame::__set_properties $self->SetTitle(""); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyFrame::__do_layout $self->{grid_sizer_1} = Wx::GridSizer->new(1, 2, 0, 0); $self->{sizer_1} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{grid_sizer_2} = Wx::GridSizer->new(3, 1, 0, 0); $self->{grid_sizer_2}->Add($self->{Add}, 0, wxEXPAND, 0); $self->{grid_sizer_2}->Add($self->{Remove}, 0, wxEXPAND, 0); $self->{grid_sizer_2}->Add($self->{Exit}, 0, wxEXPAND, 0); $self->{sizer_1}->Add($self->{grid_sizer_2}, 1, wxEXPAND, 0); $self->{grid_sizer_1}->Add($self->{sizer_1}, 1, wxEXPAND, 0); $self->{grid_sizer_1}->Add($self->{text_ctrl_1}, 0, wxEXPAND, 0); $self->SetSizer($self->{grid_sizer_1}); $self->{grid_sizer_1}->Fit($self); $self->Layout(); # end wxGlade } sub add_alert { my ($self, $event) = @_; my $md = MyDialog->new(my $frame_1); $md->ShowModal(); } sub remove { my ($self, $event) = @_; $self->{text_ctrl_1}->SetLabel("The button @numbers"); } sub update { my ($self, $event) = @_; } sub exit { my ($self, $event) = @_; $self->Close(1); } # end of class MyFrame 1; package MyDialog; use Wx qw[:everything]; use base qw(Wx::Dialog); use strict; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_ +; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; # begin wxGlade: MyDialog::new $style = wxDEFAULT_DIALOG_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $sty +le, $name ); $self->{add_number} = Wx::TextCtrl->new($self, -1, "", wxDefaultPo +sition, wxDefaultSize, ); $self->{confirm} = Wx::Button->new($self, -1, "Confirm"); $self->__set_properties(); $self->__do_layout(); Wx::Event::EVT_BUTTON($self, $self->{confirm}->GetId, \&add); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyDialog::__set_properties $self->SetTitle("Add Element"); $self->{add_number}->SetFocus(); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyDialog::__do_layout $self->{sizer_2} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{grid_sizer_3} = Wx::GridSizer->new(2, 1, 0, 0); $self->{grid_sizer_3}->Add($self->{add_number}, 0, wxEXPAND, 0); $self->{grid_sizer_3}->Add($self->{confirm}, 0, wxEXPAND, 0); $self->{sizer_2}->Add($self->{grid_sizer_3}, 1, wxEXPAND, 0); $self->SetSizer($self->{sizer_2}); $self->{sizer_2}->Fit($self); $self->Layout(); # end wxGlade } sub add { my ($self, $event) = @_; my $number = $self->{add_number}->GetValue(); unshift(@numbers, $number); $self->EndModal(0); print @numbers; $self->{text_ctrl_1}->SetLabel("The button @numbers"); } # end of class MyDialog 1; package MyFrame1; use Wx qw[:everything]; use base qw(Wx::Frame); use strict; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_ +; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; # begin wxGlade: MyFrame1::new $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $sty +le, $name ); $self->{numberdel} = Wx::TextCtrl->new($self, -1, "", wxDefaultPos +ition, wxDefaultSize, ); $self->{delete} = Wx::Button->new($self, -1, "Delete"); $self->__set_properties(); $self->__do_layout(); Wx::Event::EVT_BUTTON($self, $self->{delete}->GetId, \&remove); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyFrame1::__set_properties $self->SetTitle("Delete Item"); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyFrame1::__do_layout $self->{sizer_3} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer_4} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{grid_sizer_4} = Wx::GridSizer->new(2, 1, 0, 0); $self->{grid_sizer_4}->Add($self->{numberdel}, 0, wxEXPAND, 0); $self->{grid_sizer_4}->Add($self->{delete}, 0, wxEXPAND, 0); $self->{sizer_4}->Add($self->{grid_sizer_4}, 1, wxEXPAND, 0); $self->{sizer_3}->Add($self->{sizer_4}, 1, wxEXPAND, 0); $self->SetSizer($self->{sizer_3}); $self->{sizer_3}->Fit($self); $self->Layout(); # end wxGlade } # end of class MyFrame1 1; package MyDialog1; use Wx qw[:everything]; use base qw(Wx::Dialog); use strict; sub new { my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_ +; $parent = undef unless defined $parent; $id = -1 unless defined $id; $title = "" unless defined $title; $pos = wxDefaultPosition unless defined $pos; $size = wxDefaultSize unless defined $size; $name = "" unless defined $name; # begin wxGlade: MyDialog1::new $style = wxDEFAULT_DIALOG_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $sty +le, $name ); $self->{label_1} = Wx::StaticText->new($self, -1, "Please only Num +eric values", wxDefaultPosition, wxDefaultSize, ); $self->__set_properties(); $self->__do_layout(); # end wxGlade return $self; } sub __set_properties { my $self = shift; # begin wxGlade: MyDialog1::__set_properties $self->SetTitle("dialog_2"); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyDialog1::__do_layout $self->{sizer_5} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{grid_sizer_5} = Wx::GridSizer->new(1, 1, 0, 0); $self->{grid_sizer_5}->Add($self->{label_1}, 0, 0, 0); $self->{sizer_5}->Add($self->{grid_sizer_5}, 1, wxEXPAND, 0); $self->SetSizer($self->{sizer_5}); $self->{sizer_5}->Fit($self); $self->Layout(); # end wxGlade } # end of class MyDialog1 1; 1; package main; unless(caller){ local *Wx::App::OnInit = sub{1}; my $app = Wx::App->new(); Wx::InitAllImageHandlers(); my $frame_1 = MyFrame->new(); $app->SetTopWindow($frame_1); $frame_1->Show(1); $app->MainLoop(); }

In reply to Problem with wxPerl by Swalif

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.