2012-03-08 2 views
0

바코드를 스캔하고 스캔 한 샘플을 보관하거나 처분하는 사람들을 돕기 위해 스크립트를 작성하고 있습니다. tk의 메시지 상자 또는 Win32 :: MsgBox와 비슷한 메시지를 원합니다. 그러나 3 초 후에 사용자 상호 작용이 필요하지 않습니다.일시 중지 후 자동으로 사라지는 perl의 팝업

답변

2

내 생각은 자식 프로세스에 메시지를 작성하고 지연 후 프로세스를 종료하기 위해 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

Desktop::Notify은 데스크톱의 수동 알림 팝업에 대한 표준 호환 인터페이스입니다. 당신이 원하는 무엇

perl -MDesktop::Notify -e' 
    Desktop::Notify 
     ->new 
     ->create(
      body => q{why hello there}, 
      timeout => 3000 
     )->show' 
0

이 타임 아웃 후 윈도우에 파괴 메시지를 보내는 것입니다이 일의 TK에의 확실히 할 (사용자가 뭔가를 선택 않는 경우 메시지를 보내는! 취소 기억).

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

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

물론 위젯이 강제로 사라지면 차단하지 않아야합니다. 이것은 누군가가 위젯을 다른 방법으로도 죽이면 문제를 예방하므로 더블 보너스입니다.

관련 문제