Python键盘库不抑制Linux上的击键

Posted

技术标签:

【中文标题】Python键盘库不抑制Linux上的击键【英文标题】:Python Keyboard library not suppressing keystrokes on Linux 【发布时间】:2019-11-12 13:55:21 【问题描述】:

我正在制作一个脚本,使用称为keyboardPython 库将单个键(右-ctrl)重新映射到alt+tab。在windows 上使用Autohotkey 很容易做到这一点,但是,这在Linux 上似乎是不可能的。毕竟在keyboard 文档中他们有funcion(param, param, Suppress=False),所以它应该可以正常工作吗?

import keyboard

def altTab:
    keyboard.release(97)
    keyboard.send("alt+tab")

# 97 is the key_code for [right ctrl] on my system
keyboard.on_press_key(97, altTab, suppress=True)

  我尝试从代码的角度释放密钥,但它似乎不起作用,因为ctrl+alt+tabalt+tab 不同。我还尝试使用keyboard.remap_key 函数将right ctrl 更改为right alt,并将right alt 更改为left alt,以便right alt 可以工作,然后只发送tab 而不是alt+tab,但它仍然不起作用。我正在使用Ubuntu Linux。 请帮忙,我被难住了

【问题讨论】:

【参考方案1】:

你需要hook_key,即每次按下提供的键时调用提供的回调的方法:

import keyboard

def altTab(e):
    if e.event_type == "down":
        keyboard.release(97)
        keyboard.send("alt+tab")

# 97 is the key_code for [right ctrl] on my system
keyboard.hook_key(97, altTab, suppress=True)

编辑:添加了仅处理按键的代码。

【讨论】:

虽然这确实有效,但它与 keyboard.on_release_key 基本上是一样的,这不是我想要的,我需要 keyboard.on_press_key,所以谢谢,但这不是我想要的对于 这个答案对我也不起作用,因为它在按下(但显然不起作用)和发布时(这不是我想要的)都会触发 Docs 说它可以同时处理这两个问题。根据您的需要测试和更改 altTab 方法。 还是不行,兄弟,这是keyboard.on_press_key 的草率(不是粗鲁或任何东西)版本(这不是你说的一次) 我已经查看了pynput,但是,它需要一个活动的X server...我正在尝试使用x server 来实现此跨度>

以上是关于Python键盘库不抑制Linux上的击键的主要内容,如果未能解决你的问题,请参考以下文章

如何对 NSUndoManager+UITextInput 的击键进行分组

如何修复“忽略的击键”

我可以得到在键盘上按下一个键的时间量吗

如何在 C# 中正确捕获用户的击键,即尊重 SHIFT 键等

使用 pynput 键盘检测小键盘键

如何等待特定的击键?