in reply to Re: How do I destroy a control after its creation in wxPerl?
in thread How do I destroy a control after its creation in wxPerl?

Thanks Anonymous Monk, I've updated my post with code that demonstrates my problem. I seem to unable to create a control in a subroutine and then immediately destroy it if a condition is true.
  • Comment on Re^2: How do I destroy a control after its creation in wxPerl?

Replies are listed 'Best First'.
Re^3: How do I destroy a control after its creation in wxPerl?
by Anonymous Monk on May 12, 2011 at 08:43 UTC
    I seem to unable to create a control in a subroutine and then immediately destroy it if a condition is true.

    I assume this is a moot point by now, since the show/hide approach is best, but here it is, for posterity :)

    Your code does not attempt to do that

    Ignoring that for a minute, this is common for all GUI frameworks, when MainLoop is running, calling Destroy from a callback doesn't actually destroy a window immediately, it schedules it for destruction. See

    Now back to the code, this will show you the error
    sub button_click { $hit++; warn "hit $hit "; my $warning = Wx::StaticText->new($status, -1, "Input Error $hit " +,,[3,8]); $warning->SetForegroundColour(wxRED); if ($hit % 2) { $status->SetStatusText("", 0); $warning->Show; } else { $warning->Destroy; $status->SetStatusText("OK", 0); } warn "[\n", map({ "\t$_,\n" } $status->GetChildren ), "\] "; }
    The output is
    $ perl wx.904074.event.pl hit 2 at wx.904074.event.pl line 34. [ ] at wx.904074.event.pl line 46. hit 3 at wx.904074.event.pl line 34. [ Wx::StaticText=HASH(0xed4c34), ] at wx.904074.event.pl line 46. hit 4 at wx.904074.event.pl line 34. [ Wx::StaticText=HASH(0xed4c34), ] at wx.904074.event.pl line 46. hit 5 at wx.904074.event.pl line 34. [ Wx::StaticText=HASH(0xed4c34), Wx::StaticText=HASH(0xed4be4), ] at wx.904074.event.pl line 46. hit 6 at wx.904074.event.pl line 34. [ Wx::StaticText=HASH(0xed4c34), Wx::StaticText=HASH(0xed4be4), ] at wx.904074.event.pl line 46. hit 7 at wx.904074.event.pl line 34. [ Wx::StaticText=HASH(0xed4c34), Wx::StaticText=HASH(0xed4be4), Wx::StaticText=HASH(0xed4c44), ] at wx.904074.event.pl line 46. hit 8 at wx.904074.event.pl line 34.
    With each iteration you're creating a new statictext, but you only Destroy it every other iteration, so the list of statictext objects keeps growing.
      Anonymous Monk, thank you for your clarification. The diagnostic code is very explanatory. I'll take a look at the linked document. Thank you again.