如何在Perl Tk中绑定“Caps Lock”键事件?

时间:2016-05-10 07:02:43

标签: perl

有没有办法在Perl Tk中绑定“Caps Lock”键事件?

看起来按键是键盘硬件事件,导致键盘发送大写字母的ASCII码,而不是OS功能。

1 个答案:

答案 0 :(得分:1)

    use strict;
    use warnings;
    use Tk;


    my $mw = MainWindow->new;
    my $label = $mw->Label();
    $mw->geometry("200x200+50+50");

    $mw->bind('<Caps_Lock>' => \&exit);
    MainLoop;

更新:您可以检查密钥代码并说明:

    $mw->bind('<Caps_Lock>' =>  sub { capslock($mw)});

并定义该名称的函数:

    sub capslock
    {
      my ($mw) = shift;
      printf("keycode %d\n", $Tk::event->k);
      printf("state %d\n", $Tk::event->s);
    }

在Linux上:密钥代码为66,状态为0或2,具体取决于是否设置。对于Windows:请参阅下面的评论。

UPDATE2:你不能抱怨服务:) -
这将在标签上打印键码和状态:

use strict;
use warnings;
use Tk;

my $mw = MainWindow->new;
my $codes = '';
my $label = $mw->Label(-font => ['courier', '12'],
    -justify => 'left',-textvariable => \$codes)->pack;
$mw->geometry("200x200+50+50");
$mw->bind('<Caps_Lock>' =>  sub { capslock($mw)});
MainLoop;

sub capslock
{
  my ($mw) = @_;

  $codes = sprintf("keycode %d\nstate %d",
    $Tk::event->k, $Tk::event->s);
}