2010-05-28 103 views
2

我想用库诅咒:从http://search.cpan.org/dist/Curses-UI/ 的UI来构建一个Linux操作系统的UI。Perl诅咒:: 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循环之上我被赋予了用户界面,但现在没有任何东西与窗口通信。

紧缩问题:我需要一些显示用户界面等待输入和显示消息的方式。

任何人都可以请帮助我吗?谢谢!

+0

你必须使用Curses吗? [Wx Widgets](http://search.cpan.org/perldoc?Wx)目前是Perl最活跃的GUI工具包。 – 2010-05-28 21:47:55

回答

4

我只是用我自己的eventloop替换$ 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 } 
} 

所以我只想你自己的节拍()函数添加到while循环:

仅供参考$用户界面 - >主循环()执行如下。