2013-04-03 3 views
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 ничего не появляется. Если я используюОкно не отображается в Perl/Tk

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

вместо

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

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

ActivePerl 5.16 для Windows.

ответ

0

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

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

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