2016-11-24 25 views
1

我一直在擺弄這一段時間,似乎無法自行提出解決方案。我使用Curses :: UI來構建一個簡單的接口,它將打印屬於一個散列(鍵)的字符串列表,並且當選擇一個時,它會將相應的值發送到另一個方法。Perl Curses :: UI - 以編程方式填充Buttonbox

編輯:爲了clarities的緣故,我可以硬編碼一個Buttonbox,它的工作沒有問題。但我不知道按鈕的標籤或提前編號,所以我需要能夠以編程方式填充它。

我目前面臨的問題是我不知道如何以編程方式填充Buttonbox小部件。該documentation說-buttons標誌發生在一個數組引用,但它傳遞一個數組導致致命錯誤的

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。

相關問題