如何获取Perl / Tk中密钥的状态?

卡范

在Perl / Tk中,可以绑定这样的事件:

$mw->bind('<KeyPress-W>', sub{print "W is pressed";});

是否有可能获得此信息的另一个方向?我可以拨打“获取按键状态”或“检查是否按下W”之类的电话吗?

它不会直接对事件做出反应。

当然,可以为各种事件填充变量,但是我想知道是否有这种方法。

斯拉文·雷齐奇

Perl / Tk不提供此类功能。因此,您必须自己跟踪事件。请注意,这里有Any-KeyPressandAny-KeyRelease事件,因此您不必为每个键都创建一个绑定:

$mw->bind("<Any-KeyPress>" => sub {
    warn $_[0]->XEvent->K; # prints keysym
});

如果您使用的是X11,则使用X11::Protocol模块(可以在Perl / Tk脚本中使用)并调用该QueryKeymap方法将为您提供实际按下的键控代码。这是一个小脚本演示了这一点:

use strict;
use X11::Protocol;

# Get the keycode-to-keysym mapping. Being lazy, I just parse
# the output of xmodmap -pke. The "real" approach would be to
# use X11 functions like GetKeyboardMapping() and the
# X11::Keysyms module.
my %keycode_to_keysym;
{
    open my $fh, "-|", "xmodmap", "-pke" or die $!;
    while(<$fh>) {
        chomp;
        if (m{^keycode\s+(\d+)\s*=(?:\s*(\S+))?}) {
            if (defined $2) {
                $keycode_to_keysym{$1} = $2;
            }
        } else {
            warn "Cannot parse $_";
        }
    }
}

my $x11 = X11::Protocol->new;
while(1) {
    my $keyvec = $x11->QueryKeymap;
    for my $bit (0 .. 32*8-1) {
        if (vec $keyvec, $bit, 1) {
            warn "Active key: keycode $bit, keysym $keycode_to_keysym{$bit}\n";
        }
    }
    sleep 1;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Perl JSON如何获取密钥值

来自分类Dev

如何从Perl的xml中获取所需的元素?

来自分类Dev

如何在Perl中获取xml值?

来自分类Dev

如何从Perl的xml中获取所需的元素?

来自分类Dev

如何在perl中获取捕获的组

来自分类Dev

如何在Perl TK中获取当前的活动菜单项?

来自分类Dev

Perl中哈希的哈希,获取密钥

来自分类Dev

Perl 5.26:如何从2d哈希获取密钥?

来自分类Dev

如何从Perl中的一个很大的哈希中获取单个密钥(随机确定)?

来自分类Dev

Perl / curl如何获取状态码和响应正文

来自分类Dev

如何从Perl中的文件中获取前4个单词

来自分类Dev

如何从Perl中的间隔数组中获取补数间隔?

来自分类Dev

如何在Perl中从文件名获取文件句柄?

来自分类Dev

如何在Perl中以秒为单位获取日期差异

来自分类Dev

如何在Perl Mason CGIHandler中获取QUERY_STRING?

来自分类Dev

如何在Perl中获取HTTP和https返回代码

来自分类Dev

如何在perl中以json格式获取LWP请求的输出

来自分类Dev

Perl如何从祝福对象请求数据中获取值

来自分类Dev

如何从Perl中的哈希获取最小值键

来自分类Dev

如何在Perl中获取DateTime对象的年份?

来自分类Dev

如何在Perl中以秒为单位获取日期差异

来自分类Dev

如何在Perl中获取哈希的嵌套键值?

来自分类Dev

Perl如何从Bless对象请求数据中获取值

来自分类Dev

如何在Perl中获取程序名称

来自分类Dev

如何使用 Perl 从 Apache Solr 的响应中获取 numFound 值

来自分类Dev

如何在Perl / Tk + AnyEvent中停止MainLoop

来自分类Dev

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

来自分类Dev

perl“ for”循环获取服务状态

来自分类Dev

在Perl中获取JSON

Related 相关文章

热门标签

归档