2

我正在尝试使用来自http://search.cpan.org/dist/Curses-UI/的库 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 循环上方,我得到了用户界面,但现在没有任何东西与窗口通信。

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

有人可以帮我吗?谢谢!

4

1 回答 1

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 循环中。

于 2011-02-09T12:02:55.643 回答