Всплывающее в Perl, которое автоматически исчезает после паузы - PullRequest
0 голосов
/ 08 марта 2012

Я пишу сценарий, чтобы помочь людям, которые будут сканировать штрих-код и получать ответ, чтобы сохранить или утилизировать отсканированный образец. Я хочу получить сообщение, подобное окну сообщений tk или Win32 :: MsgBox, но такое, которое не требует взаимодействия с пользователем, чтобы исчезнуть через три секунды.

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

Я думал создать сообщения в дочернем процессе, используя alarm, чтобы завершить процесс после задержки.В Tk:

sub tmpMsgBox {
    my ($message,$delay) = @_;
    if (fork() == 0) {
        my $topWin = MainWindow->new;
        my $label = $topWin->Label();
        my $ok = $topWin->Button();
        $label->pack(-side => 'top');
        $ok->pack(-side => 'bottom');
        $label->configure(-text => $message);
        $ok->configure(-text => 'Ok', -command => sub {exit});

        $SIG{ALRM} = sub {exit};
        alarm $delay || 1;
        $topWin->MainLoop;
    }
}

for (3..10) {
    tmpMsgBox("This window will disappear in $_ seconds", $_);
}

Я не думаю, что Tk хорошо играет с fork, поэтому эта идея, вероятно, не будет работать так хорошо, если вы также используете Tk в своем основном процессе.

1 голос
/ 09 марта 2012

Рабочий стол :: Уведомление - это стандартный интерфейс для всплывающих окон с пассивным уведомлением на рабочем столе.

0 голосов
/ 09 марта 2012

Что вы хотите сделать, это отправить сообщение об уничтожении в окно после истечения времени ожидания (не забывая отменить отправку сообщения, если пользователь что-то выберет!) Tk, безусловно, способен сделать это.

# Make the timeout something like this...
$id = $widget->after(3000, sub {
    $widget->destroy;
});

# To cancel, just do...
$id->cancel;

Вы также должны убедиться, что вы не блокируете, когда виджет вынужден уходить, конечно.Это также предотвращает проблемы, если кто-то убивает виджет и другими способами, так что это двойной бонус.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...