一、窗口:
顶层窗口:Wx::Frame,Wx::Dialog。只有顶层窗口创建的时候才可以使用undef作为其父窗口。其它窗口都必须在构造函数中传入一个非空的父窗口。
Wx::Frame一个可以包含其他窗口,大小可变的窗口
Wx::Dialog是可变大小的用于给用户提供选项的窗口
二、容器:
Wx::Panel为其他窗口提供布局的窗口
Wx::Notebook可以用TAB页面进行切换的窗口
Wx::ScrollerWindow可以有滚动条的窗口
三、控件窗口
如Wx::Button等
四、静态控件
Wx::StaticText文字标签控件
Wx::StaticLine显示静态的一行
Wx::StaticBitmap显示静态图片
Wx::StaticBox用来在其它控件周围显示一个静态的方框
五、菜单
Wx::Menu
六、控件条
Wx::Menu::Bar菜单条,位于Wx::Frame上
Wx::ToolBar工具条
七、布局
7.1Wx::BoxSizer可以将控件进行横向或纵向排列。如果采用横向排列,则子控件在纵向上可指定居中,顶部对齐,底部对齐。如果采用纵向排列,可指定居中,左对齐、右对齐。
$self=Wx::Frame->new(),$self->SetSizer($sr)与顶层窗口绑定,现在可以在这个顶层布局控件中放置窗口或其它控件;$sr =Wx::BoxSizer->new(),$sr->Fit以顶层窗口指针为参数,以使顶层窗口大小适合所有控件所需大小。$sr->SetSizeHints以顶层窗口指针为参数,以使顶层窗口在以后执行过程中尺寸永远不小于初始尺寸;
直接用$self->SetSizerAndFit可以达到以上三个同样效果,即依次调用上面三个函数。
用Add可以加一个额外的行、列间距。
- use Wx;
- package MyFrame;
- use base qw(Wx::Frame);
- use Wx qw(:sizer wxDefaultPosition wxDefaultSize);
- use Wx::Event qw(EVT_BUTTON );
- our @id = ( 0 .. 5 ); # IDs array
- ########################### <<CODE ############################
- sub new {
- my $ref = shift;
- my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
- my $sr = Wx::BoxSizer->new(wxVERTICAL);
- $sr->Add( Wx::Button->new( $self, $id[0], 'button 1' ), 1, wxALL, 5 );
- $sr->Add( 10, 10, 0, wxGROW );#增加行间距
- $sr->Add( Wx::Button->new( $self, $id[1], 'button 2' ), 1, wxGROW | wxALL, 5 );
- $self->SetSizer($sr);
- $sr->Fit($self);
- $sr->SetSizeHints($self);
- #与前三行效果相同
- #$self->SetSizerAndFit($sr);
- EVT_BUTTON( $self, $id[0], sub{} );
- return $self;
- }
- ########################### CODE END ############################
- package MyApp;
- use base 'Wx::App';
- sub OnInit {
- my $self = shift;
- my $frame = MyFrame->new;
- $frame->Show(1);
- $self->SetTopWindow($frame);
- return 1;
- }
- package main;
- MyApp->new->MainLoop;
7.2Wx::StaticBoxSizer类似Wx::BoxSizer
- ########################### <<CODE ############################
- sub new {
- my $ref = shift;
- my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
- my $nsz =
- Wx::StaticBoxSizer->new(
- Wx::StaticBox->new( $self, -1, 'Wx::StaticBoxSizer' ), wxVERTICAL );
- $nsz->Add( Wx::Button->new( $self, $id[2], 'button 3' ),
- 1, wxALL, 5 );
- $nsz->Add( 10, 10, 0, wxGROW );#增加行间距
- $nsz->Add( Wx::Button->new( $self, $id[3], 'button 4' ),
- 1, wxGROW | wxALL, 5 );
- $self->SetSizer($nsz);
- $nsz->Fit($self);
- $nsz->SetSizeHints($self);
- #与前三行效果相同
- #$self->SetSizerAndFit($nsz);
- EVT_BUTTON( $self, $id[2], sub{} );
- return $self;
- }
- ########################### CODE END ############################
7.3Wx::GridSizer可以以二维的方式排列子控件,且二维表的每个单元格大小相同,用Add可以加一个额外的行、列间距。
- ########################### <<CODE ############################
- sub new {
- my $ref = shift;
- my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
- my $tsz = Wx::GridSizer->new( 3, 3, 1, 1, );
- for my $i ( 1 .. 9 ) {
- $tsz->Add( Wx::Button->new( $self, "$id[$i-1]", "Button $i" ),
- 0, wxALL, 5);
- }
- $self->SetAutoLayout( 1 );
- $self->SetSizerAndFit($tsz);
- EVT_BUTTON( $self, $id[0], sub{} );
- return $self;
- }
- ########################### CODE END ############################
7.4Wx::GridBagSizer将子控件按虚拟的网格进行排列,子控件位置通过Wx::GBPosition->new()指定,大小通过Wx::GBSpan->new()指定,对象的大小可不限于一个网格
- ########################### <<CODE ############################
- sub new {
- my $ref = shift;
- my $self = $ref->SUPER::new(undef,-1,'wxPerl',wxDefaultPosition,wxDefaultSize);
- my $gbr = Wx::GridBagSizer->new();
- $gbr->Add( Wx::Button->new( $self, $id[0], 'button 1' ),Wx::GBPosition->new(0,0));
- #指定button 2大小为两单元格
- $gbr->Add( Wx::Button->new( $self, $id[1], 'button 2' ),Wx::GBPosition->new(2,2),Wx::GBSpan->new(1,2),wxGROW);
- $gbr->Add( Wx::Button->new( $self, $id[2], 'button 3' ),Wx::GBPosition->new(3,2) );
- $gbr->Add( Wx::Button->new( $self, $id[3], 'button 4' ),Wx::GBPosition->new(3,3));
- $gbr->AddGrowableRow(3);#第三行大小可变
- $gbr->AddGrowableCol(2);#第二列大小可变
- $self->SetSizerAndFit($gbr);
- EVT_BUTTON( $self, $id[0], sub{} );
- return $self;
- }
- ########################### CODE END ############################
另外Wx::Perl::Dialog这个模块对布局也很有用,例子的话直接看CPAN的例子就行了。
阅读(2066) | 评论(0) | 转发(0) |