2

我正试图围绕 Curses/NCurses (仍然不明白其中的区别)和 perl,更准确地说是Curses::UI模块,更准确地说是 Curses::UI::Widget 包 - 请参阅http://search.cpan.org /~mdxi/Curses-UI/lib/Curses/UI/Widget.pm

为了理解它,我想Curses::UI::Widget从那里开始看一些超级简单的“Hello World”。

文档中有一个简单的示例Curses::UI::Widget,但这不起作用,因为它调用$this->generic_focus并且它是未定义的,我不知道它实际上应该做什么。

是否有一些编写Curses::UI小部件的实际教程,或者至少有一些工作示例?

编辑:为了让自己清楚:文档中的基本文本编辑器对我有用,但现在我想编写自己的小部件,我不确定要实现哪些功能以及如何实现。

主要是,我不确定方法应focus该做什么以及是否必须实现该方法generic_focus

编辑2:

例如,在上面的链接文档中,函数generic_focus被编写为好像它是在 中实现的Curses::UI::Widget,但实际上它并没有在任何地方实现。到底发生了什么?

4

2 回答 2

5

从本教程借用的示例

在此处输入图像描述

#!/usr/bin/perl -w

use strict;
use Curses::UI;
my $cui = new Curses::UI( -color_support => 1 );
my @menu = (
    { -label => 'File',
        -submenu => [
            { -label => 'Exit      ^Q', -value => \&exit_dialog  }
        ]
    },
);
sub exit_dialog()
{
    my $return = $cui->dialog(
        -message   => "Do you really want to quit?",
        -title     => "Are you sure???",
        -buttons   => ['yes', 'no'],

    );

    exit(0) if $return;
}
my $menu = $cui->add(
    'menu','Menubar',
    -menu => \@menu,
    -fg  => "blue",
);
my $win1 = $cui->add(
    'win1', 'Window',
    -border => 1,
    -y    => 1,
    -bfg  => 'red',
);
my $texteditor = $win1->add("text", "TextEditor",
    -text => "Here is some text\n"
    . "And some more");
$cui->set_binding(sub {$menu->focus()}, "\cX");
$cui->set_binding( \&exit_dialog , "\cQ");
$texteditor->focus();
$cui->mainloop();

curses 和 ncurses 之间的区别在于 ncurses 是 curses 的开源克隆。见https://stackoverflow.com/a/1517768/465183

于 2013-08-13T18:45:34.610 回答
2

文档页面中的简单示例对我有用:

use Curses::UI;
my $cui = Curses::UI->new( -clear_on_exit => 1);
$cui->dialog("Hello, world!");
于 2013-08-13T18:47:41.880 回答