Perl Curses :: UI - 以编程方式填充Buttonbox

时间:2016-11-24 21:02:13

标签: perl hash curses

我现在已经习惯了这一段时间,似乎无法自己想出一个解决方案。我正在使用Curses :: UI构建一个简单的接口,它将打印出属于散列(键)的字符串列表,当选择一个时,它会将相应的值发送给另一个方法。

编辑:为了清楚起见,我可以对Buttonbox进行硬编码,它可以正常工作。但我不知道按钮的标签或我提前的数字,所以我需要能够以编程方式填充它。

我目前面临的问题是我不知道如何以编程方式填充Buttonbox小部件。 documentation表示-buttons标志接受一个arrayref,但是传递一个数组会导致致命的错误

Invalid button definition.
It should be a HASH reference,
but is a ARRAY reference.

传递哈希引用有效,但只填充最后一个按钮定义。 e.g。

%btnHash = (-label => 'Button 1', -value => 1, -label => 'Button 2', -value => 2);
$buttons = $win->add(
    'videoButtons', 'Buttonbox',
    -vertical   =>  1,
    -buttons    =>  [\%btnHash]
);

仅在按钮2中填充到屏幕的结果。我还尝试使用两个按钮发送哈希,每个按钮由适当的大括号包围,但这导致根本没有填充任何内容。

这是我一直在玩的相关代码段

%btnHash = (-label => 'Button 1', -value => 1);
push(@btnArray,%btnHash);
%btnHash = (-label => 'Button 2', -value => 2);
push(@btnArray,%btnHash);

#Tried an Array of the literal button definitions, same fatal error as before.
#@btnArray = ({-label => 'Button 1', -value => 1},{-label => 'Button 2', -value => 2});

$buttons = $win->add(
    'videoButtons', 'Buttonbox',
    -vertical   =>  1,
    -buttons    =>  [\@btnArray]
);

它不漂亮,但我已经开始在墙上扔东西,看看它有什么作用。即使我必须使用一个循环来不断地创建一个新的哈希并将其存储在一个很好的数组中,那么我可能会再次大量过度复杂。

1 个答案:

答案 0 :(得分:0)

@btnArray = ({-label => 'Button 1', -value => 1},{-label => 'Button 2', -value => 2});
$buttons = $win->add(
    'videoButtons', 'Buttonbox',
    -vertical   =>  1,
    -buttons    =>  \@btnArray
);

完美无缺。只是不得不摆脱方括号。 D'哦。