Perl Curses :: UI не отображает все виджеты - PullRequest
1 голос
/ 17 января 2012

Я использую Perl Curses :: UI для создания пользовательского интерфейса для довольно простого скрипта. Однако не все, что я добавляю в окно, прорисовывается. Отрисовываются только две вещи: добавляется первый виджет, и каким бы ни был первый виджет, чтобы получить фокус Выполняя приведенный ниже код, рисуется только первый TextViewer, а затем кнопка. 2-й и 3-й TextViewers (для обеих Windows) не прорисованы. Если я сделаю их фокусируемыми, а затем перейду к ним, они начнут рисоваться. Что я делаю не так?

#!/usr/bin/perl -w
use Curses::UI;

my $cui = new Curses::UI;

my $win = $cui->add(
   'window','Window',
   -border  => 1,
   -title   => 'Test Big Window'
);
$win->add(
   'test0','TextViewer',
   -x => 1,
   -y => 1,
   -text => 'test0',
   -focusable  => 0
);
$win->add(
   'test1','TextViewer',
   -x => 1,
   -y => 2,
   -text => 'test1',
   -focusable  => 0
);
$win->add(
   'test2','TextViewer',
   -x => 1,
   -y => 3,
       -text => 'test2',
   -focusable  => 0
);
$win->add(
   'winButtons','Buttonbox',
   -x => 1,
   -y => 4,
   -buttons => [{-label=>'sub_window',-onpress=>sub{show_win2($win);}}]
);

sub show_win2 {
    $win = shift;
    my $win2 = $win->add(
       'window2','Window',
       -border  => 1,
       -title   => 'Test Little Window',
       -centered   => 1,
       -height  => 20,
       -width   => 40
    );
    $win2->add(
       'test3','TextViewer',
       -x => 1,
       -y => 1,
       -text => 'test3',
       -focusable  => 0
    );
    $win2->add(
       'test4','TextViewer',
       -x => 1,
       -y => 2,
       -text => 'test4',
       -focusable  => 0
    );
    $win2->add(
       'test5','TextViewer',
       -x => 1,
       -y => 3,
       -text => 'test5',
       -focusable  => 0
    );
    my $buttons = $win2->add(
       'addOutputButtons','Buttonbox',
       -buttonalignment  => 'right',
       -bg               => -1,
       -fg               => -1,
       -y                => 4,
       -buttons          => [{-label=>'Exit',-onpress=>sub{exit(0);}}]
    );
    $win2->modalfocus();
}

$cui->mainloop();
$win->modalfocus();

P.S. Есть ли более простой способ вставки таких блоков кода, кроме добавления вручную 4 пробелов перед каждой строкой ??

Ответы [ 2 ]

0 голосов
/ 13 марта 2018

Первый виджет перекрывает другие виджеты.Зафиксируйте высоту и ширину каждого виджета и убедитесь, что ни один виджет не перекрывает пространство другого виджета.Убедитесь, что параметры x и y также установлены правильно, чтобы избежать наложения.

0 голосов
/ 18 января 2012

Вы можете использовать TextEntry с параметром -readonly => 1 вместо TextViewer в качестве обходного пути для отображения текстовых элементов.

По крайней мере, у меня это работает.

...
$win->add(
   'test1','TextEntry',
   -x => 1,
   -y => 2,
   -text => 'test1',
   -readonly => 1,
   -focusable => 0,
);
...
...