Perl Curses :: UI窗口不会绘制所有小部件

时间:2012-01-17 16:21:28

标签: perl user-interface curses

我正在使用perl的Curses :: UI为一个相当简单的脚本构建一个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 :(得分:0)

您可以TextEntry使用-readonly => 1选项代替TextViewer作为解决方法来显示文本元素。

至少它对我有用。

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

答案 1 :(得分:0)

第一个小部件与其他小部件重叠。修复每个窗口小部件的高度和宽度,并确保没有窗口小部件与其他窗口小部件的空间重叠。确保正确设置x和y参数以避免重叠。