【问题标题】:Example curses/ncurses Perl widget?示例 curses/ncurses Perl 小部件?
【发布时间】:2013-08-13 18:36:45
【问题描述】:

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

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

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

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

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

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

编辑 2:

例如,在上面的链接文档中,函数generic_focus 的编写就像在Curses::UI::Widget 中实现一样,但实际上它并没有在任何地方实现。具体是怎么回事?

【问题讨论】:

    标签: perl ncurses curses


    【解决方案1】:

    this tutorial借来的例子

    #!/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

    【讨论】:

    • 谢谢,这也适用于我,但现在我想编写自己的小部件,但我不知道从哪里开始
    【解决方案2】:

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

    use Curses::UI;
    my $cui = Curses::UI->new( -clear_on_exit => 1);
    $cui->dialog("Hello, world!");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 2011-01-23
      • 2018-09-09
      相关资源
      最近更新 更多