【发布时间】:2015-08-06 03:46:20
【问题描述】:
我对 Perl 比较陌生,我正在使用 wxPerl 创建一个 GUI 应用程序。现在,我想将Panel 添加到Frame 中,可能使用sizer,以便面板在调整框架大小时自动调整大小。
这就是我得到的:
(1) 我必须使用BoxSizer,它可以在一个方向上拉伸组件。
(2) 我必须在Add 子例程中传递参数才能在另一个方向拉伸组件。
我写了以下代码:
package Main;
use Wx;
use parent 'Wx::App';
sub OnInit {
my $frame = Wx::Frame->new(undef, -1, "SimpleCalc ".$Information::VERSION_NO, [-1,-1], [-1,-1]);
my $centerPanel = Wx::Panel->new($frame, -1, [-1,-1], [-1,-1]);
#set red background
$centerPanel->SetBackgroundColour(Wx::Colour->new(255,0,0));
my $frameSizer = Wx::BoxSizer->new(wxHORIZONTAL);
$frameSizer->Add($centerPanel, 1, 0, 0);
$frame->SetSizer($frameSizer);
$frame->Center();
$frame->Show(1);
return 1;
}
my $app = Main->new;
$app->MainLoop;
不想要的结果:
我想要的是在两个(水平和垂直)方向上拉伸红色面板,或者简而言之,我想要类似于 Java 中的 BorderLayout 的东西。
根据一些在线教程,我尝试将$frameSizer->Add($centerPanel, 1, 0, 0);替换为
$frameSizer->Add($centerPanel, 1, wxEXPAND, 0);,但脚本没有运行。出现一个错误,指出它无法解决 Wx::Sizer::Add(Wx::Panel, number, scalar, number) 的重载问题。我也试过$frameSizer->Add($centerPanel, 1, 0, 0, wxEXPAND);,但是得到的帧和图片中的帧一模一样。
是否有可能在wxPerl 中有类似于Java 的BorderLayout 的东西?提前致谢。
附:我知道有一个duplicate,但没有具体的答案...
【问题讨论】: