Окно не появляется в 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
должен исправить это