2016-11-24 2 views
1

나는 잠시 동안 지금 당황하고 있었고 스스로 해결 방법을 찾지 못했습니다. 저는 Curses :: UI를 사용하여 해시 (키)에 속한 문자열 목록을 인쇄하는 간단한 인터페이스를 작성하고 하나를 선택하면 다른 값으로 각각의 값을 보냅니다.Perl Curses :: UI - 프로그래밍 방식으로 Buttonbox 채우기

편집 : 분명히하기 위해 Buttonbox를 하드 코딩 할 수 있으며 문제없이 작동합니다. 그러나 나는 단추의 레이블이나 내가 미리 가질 수있는 번호를 모릅니다. 따라서 프로그래밍 방식으로 채울 수 있어야합니다.

현재 직면하고있는 문제는 프로그래밍 방식으로 Buttonbox 위젯을 채우는 방법을 모르겠다는 것입니다. documentation는 -buttons 플래그가 arrayref에 필요하지만 그것을 해시 참고 문헌을 전달

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

의 치명적인 오류가 그것을 배열 결과를 전달하지만 맨 마지막 버튼 정의를 채 웁니다 말한다. 예 :

%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] 
); 

그것은 꽤 아니다 놀겠다는 거 봤는데 관련 코드는하지만 작동을 확인하려면 벽에 물건을 던지기 시작했습니다. 루프를 사용하여 끊임없이 새로운 해시를 만들고이를 배열에 저장할 필요가있는 경우에도이 코드를 다시 지나치게 복잡하게 만들 수 있습니다.

+0

[demo-buttonbox] (https://metacpan.org/source/MDXI/Curses-UI-0.9609/examples/demo-buttonbox) 스크립트부터 시작합니다. –

+0

맞습니다. 문제는 실제로 버튼을 하드 코딩하여 문제를 추가하는 것이 아닙니다. 그건 잘 작동합니다. 문제는 내가 미리 내용이나 카운트를 모르는 버튼으로 채울 수있는 방법이 없다는 것입니다. –

+0

스크립트에 해시 배열이 표시됩니다. 해시 배열에 대한 참조를 사용했다면 예제보다 더 가깝습니다. –

답변

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

완벽하게 작동합니다. 그냥 대괄호를 제거해야했습니다. D' oh.

관련 문제