有没有办法在Perl Tk中绑定“Caps Lock”键事件?
看起来按键是键盘硬件事件,导致键盘发送大写字母的ASCII码,而不是OS功能。
答案 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);
}