Окно не появляется в 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.

1 ответ

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

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

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

Другие вопросы по тегам