From: Michele B. <mb...@it...> - 2003-08-27 10:03:39
|
Hi! I've got a problem with Wx::Sizer. At the bottom of this message you'll find the code, taken from the constructor of my Wx::Dialog-derived class. The problem is that the dialog appears with all widgets one over another ( like in the photo I uploaded at http://www.italpro.net/mb/wxsizer.jpg ), instead of appearing in a way like this: INMSG OUTMSG BUTTON1 BUTTON2 I'm using Linux and wxPerl 0.14. What am I doing wrong? Thank you, Michele. -----Code----- # Create sizers my $topsizer = new Wx::BoxSizer(wxVERTICAL); $self->{'InMsg'} = new Wx::TextCtrl( $self, -1, "111", wxDefaultPosition, new Wx::Size(350, 60), wxTE_MULTILINE ); $topsizer->Add($self->{'InMsg'}, 1, wxEXPAND || wxALL, 10); $self->{'OutMsg'} = new Wx::TextCtrl( $self, -1, "aaa", wxDefaultPosition, new Wx::Size(300, 20), wxTE_MULTILINE ); $topsizer->Add($self->{'OutMsg'}, 1, wxEXPAND || wxALL, 10); my $buttonsizer = new Wx::BoxSizer(wxHORIZONTAL); $buttonsizer->Add( new Wx::Button($self, $ID_SENDMSG, "Send Message"), 0, wxALL, 10 ); $buttonsizer->Add( new Wx::Button($self, $ID_CLOSECHAT, "Close"), 0, wxALL, 10 ); $topsizer->Add($buttonsizer, 0, wxALIGN_CENTER); $topsizer->SetSizeHints($self); |
From: DH <cra...@ya...> - 2003-08-27 20:39:34
|
That snippet doesn't compile. You wanna read the "Sizer Overview" in the manual, as well as http://wxperl.pvoice.org/cgi-wxperl/view.pl/SizerTutorial or even the gooogle cache version http://216.239.33.104/search?q=cache:aGW8x67HCa8J:wxperl.pvoice.org/cgi-wxperl/view.pl/SizerTutorial+wxperl+sizer+tutorial&hl=en&ie=UTF-8 Here is an example of what you were trying to do that I just whipped up in under 1 minute with wxglade. #!/usr/bin/perl -w -- # generated by wxGlade 0.3pre2 on Wed Aug 27 13:36:24 2003 # To get wxPerl visit http://wxPerl.sourceforge.net/ use Wx 0.15 qw[:allclasses]; use strict; package MyFrame; 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: MyFrame::new $style = wxDEFAULT_FRAME_STYLE unless defined $style; $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name ); $self->{text_ctrl_1} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, ); $self->{text_ctrl_2} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, ); $self->{button_2} = Wx::Button->new($self, -1, "button_2"); $self->{button_1} = Wx::Button->new($self, -1, "button_1"); $self->__set_properties(); $self->__do_layout(); return $self; # end wxGlade } sub __set_properties { my $self = shift; # begin wxGlade: MyFrame::__set_properties $self->SetTitle("frame_1"); # end wxGlade } sub __do_layout { my $self = shift; # begin wxGlade: MyFrame::__do_layout $self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL); $self->{sizer_2} = Wx::BoxSizer->new(wxHORIZONTAL); $self->{sizer_1}->Add($self->{text_ctrl_1}, 1, wxEXPAND, 0); $self->{sizer_1}->Add($self->{text_ctrl_2}, 0, wxEXPAND, 0); $self->{sizer_2}->Add($self->{button_2}, 0, 0, 0); $self->{sizer_2}->Add($self->{button_1}, 0, 0, 0); $self->{sizer_1}->Add($self->{sizer_2}, 1, wxEXPAND, 0); $self->SetAutoLayout(1); $self->SetSizer($self->{sizer_1}); $self->{sizer_1}->Fit($self); $self->{sizer_1}->SetSizeHints($self); $self->Layout(); # end wxGlade } # end of class MyFrame 1; package MyApp; use base qw(Wx::App); use strict; sub OnInit { my( $self ) = shift; Wx::InitAllImageHandlers(); my $frame_1 = MyFrame->new(); $self->SetTopWindow($frame_1); $frame_1->Show(1); return 1; } # end of class MyApp package main; unless(caller){ my $app = MyApp->new(); $app->MainLoop(); } __________________________________ Do you Yahoo!? Yahoo! SiteBuilder - Free, easy-to-use web site design software http://sitebuilder.yahoo.com |
From: Michele B. <mb...@it...> - 2003-08-27 21:04:11
|
Hi! > That snippet doesn't compile. Yep, it wasn't supposed to, it was just a part of my program, to show how I was creating the dialog with the Sizer. ;) Anyway, thank you very much for your code!!! Looking at it I discovered that my problem was that I left out: $self->SetSizer($self->{sizer_1}); which seems to be rather fundamental. ;-) Thanks also for the wxGlade hint, I'll dig into that. Michele. -- Michele Beltrame http://www.italpro.net/mb/ ICQ# 76660101 - e-mail: mb...@it... |