바코드를 스캔하고 스캔 한 샘플을 보관하거나 처분하는 사람들을 돕기 위해 스크립트를 작성하고 있습니다. tk의 메시지 상자 또는 Win32 :: MsgBox와 비슷한 메시지를 원합니다. 그러나 3 초 후에 사용자 상호 작용이 필요하지 않습니다.일시 중지 후 자동으로 사라지는 perl의 팝업
0
A
답변
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;
물론 위젯이 강제로 사라지면 차단하지 않아야합니다. 이것은 누군가가 위젯을 다른 방법으로도 죽이면 문제를 예방하므로 더블 보너스입니다.