Perl Curses::UI

问题描述 投票:0回答:2

我正在尝试使用库 Curses:UI 来自 http://search.cpan.org/dist/Curses-UI/ 在 Linux karmic 上构建 UI。

我可以创建一个简单的用户界面,例如:

#!usr/usr/bin/perl

use strict;
use Curses;
use Curses::UI;

$ui = new Curses::UI(-color_support=>1,-clear_on_exit=>1,-intellidraw=>1);
my $window = $ui->add('window', 'Window',-intellidraw=>1);
my $message = $window->add(-text=>"Hello!",-intellidraw=>1);
$window->focus(); 
$ui->mainloop();

问题:我需要某种方式来向 UI 传达信息,即我有一个循环,它将等待消息到来并更改窗口中的文本。一旦出现此消息,将显示一个弹出窗口。 尝试:

my $ui = new Curses::UI(-color_support=>1,-clear_on_exit=>1,-intellidraw=>1);
my $window = $ui->add('window', 'Window',-intellidraw=>1);
my $message = $window->add(-text=>"Hello!",-intellidraw=>1);

pseudocode
while(true) #implemented a function to wait
{
    popup($window->text("Hello how are you?"));
}

$window->focus(); 
$ui->mainloop();

问题:上面的方法不起作用。我看到一个黑屏,显示我的消息。我已阅读文档,当我将 $ui->mainloop() 重新定位到 while 循环上方时,我得到了用户界面,但现在没有任何内容与窗口通信。

巧合的问题:我需要某种方式来显示用户界面等待输入并显示消息。

有人可以帮我解决这个问题吗?谢谢!

perl user-interface curses
2个回答
4
投票

我只需将 $ui->mainloop() 替换为我自己的事件循环,我自己的东西也会更新。

供参考 $ui->mainloop() 实现如下:

sub mainloop {
    my ($self) = @_;

    # Draw the initial screen.
    $self->focus(undef, 1); # 1 = forced focus
    $self->draw;
    doupdate();

    # Inifinite event loop.
    while (1) { $self->do_one_event }
}

所以我只需将您自己的tick() 函数添加到while 循环中即可。


0
投票

我一直在寻找关于很棒的 Curses::UI 的好教程。

最近有幸找到最好的,想分享给大家...

https://github.com/gitpan/Curses-UI/blob/master/examples/demo-widgets

享受吧!

© www.soinside.com 2019 - 2024. All rights reserved.