Perl Curses :: Пользовательский интерфейс - PullRequest
2 голосов
/ 28 мая 2010

Я пытаюсь использовать библиотеку Curses: UI от http://search.cpan.org/dist/Curses-UI/ для создания интерфейса на linux karmic.

Я могу создать простой пользовательский интерфейс, например:

#!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();

Вопрос: Мне нужен какой-то способ передачи информации в пользовательский интерфейс, т. Е. У меня есть цикл, который будет ожидать поступления сообщения и изменять текст в окне.Как только появится это сообщение, появится всплывающее окно.Попытка:

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, я получил пользовательский интерфейс, но теперь ничего не сообщается окну.

Совместный вопрос: мне нужен какой-то способ отображенияпользовательский интерфейс ожидает ввода и отображает сообщения.

Может ли кто-нибудь помочь мне в этом?Спасибо!

1 Ответ

4 голосов
/ 09 февраля 2011

Я бы просто заменил $ ui-> mainloop () на свой собственный 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 }
}

Так что я бы просто добавил вашу собственную функцию tick () в цикл while.

...