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 に答える