我正在尝试使用库 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 循环上方时,我得到了用户界面,但现在没有任何内容与窗口通信。
巧合的问题:我需要某种方式来显示用户界面等待输入并显示消息。
有人可以帮我解决这个问题吗?谢谢!
我只需将 $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 循环中即可。
我一直在寻找关于很棒的 Curses::UI 的好教程。
最近有幸找到最好的,想分享给大家...
https://github.com/gitpan/Curses-UI/blob/master/examples/demo-widgets
享受吧!