0
$mw=MainWindow->new(-title=>'Game of Life');
$frmitems=$mw->Frame;
$frmsettings=$mw->Frame;
$lab1=$frmsettings->Label(-text=>'Size of square:')->pack;
$hen=$frmsettings->Entry(-textvariable=>10);
$lab2=$frmsettings->Label(-text=>' x ');
$wen=$frmsettings->Entry(-textvariable=>10);
$hen->grid($lab2,$wen);
$ststr=$frmsettings->Label(-text=>"Current step: $step")->pack;
$frmitems->grid($frmsettings);
$mw->gridColumnconfigure(0, -pad => 10);
$mw->gridColumnconfigure(1, -pad => 10);
$mw->MainLoop;

这段代码应该是一个简单的窗口。但是在 MainLoop 之后什么都没有出现。如果我使用

$hen->pack($lab2,$wen);

代替

$hen->grid($lab2,$wen);

窗口出现,但我需要另一个几何图形(如网格)。怎么了?

Windows 上的 ActivePerl 5.16。

4

1 回答 1

0

$lab1 正在使用pack,但 $hen、$lab2 和 $wen 正在尝试使用grid(都在同一个框架中)。在小部件中混合几何管理器不起作用。从掌握 Perl/Tk 开始:

但是如果我们开始使用 pack,我们应该继续在 $mw 中直接包含的所有小部件上使用 pack。不要在中间切换到网格,因为两个几何管理器会陷入竞争状态:一个会创建它的布局,这会影响另一个的几何计算,这会影响第一个的布局,导致它重新计算它的几何,无限。

更改 $lab1 使用grid应该可以解决这个问题

于 2013-04-03T11:12:50.880 回答