Окно не появляется в Perl/Tk

$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);

появляется окно, но мне нужна другая геометрия (например, с сеткой). Что случилось?

ActivePerl 5.16 для Windows.


person michaeluskov    schedule 03.04.2013    source источник


Ответы (1)


$lab1 использует pack, но $hen, $lab2 и $wen пытаются использовать grid (все в одном кадре). Смешивание менеджеров геометрии в виджете не работает. Из Освоение Perl/Tk:

но если мы начнем использовать пакет, мы должны продолжать использовать пакет для всех виджетов, содержащихся непосредственно в $mw. Не переключайтесь на сетку посередине, потому что два менеджера геометрии попадут в состояние гонки: один создаст свой макет, который повлияет на расчеты геометрии другого, что повлияет на макет первого, заставив его пересчитать свои геометрии, до бесконечности.

Изменение $lab1 для использования grid должно исправить это.

person charlesbridge    schedule 03.04.2013