【问题标题】:Im trying to make macro/hotkey我正在尝试制作宏/热键
【发布时间】:2020-11-20 03:09:21
【问题描述】:

它只是不起作用,我收到一个错误提示

AttributeError: 'Controller' object has no attribute 'is_pressed'

代码:

from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller
from pynput.keyboard import Controller
from pynput import mouse
from pynput import keyboard

keyboard = Controller()

while True:
    if keyboard.is_pressed('u'):
        keyboard.press('w')
        keyboard.release('w')
       

谁能帮帮我!

【问题讨论】:

  • pynput 具有特殊类 Listener 来捕捉按下的键 - 它不需要 while TrueController 仅用于发送新密钥。你为什么认为必须有 is_pressed ?你检查documentation了吗?
  • 你为什么认为is_pressed属性应该存在?

标签: python macros hotkeys


【解决方案1】:

pynput 具有特殊类 Listener 来捕捉按下的键。它在线程中运行,不需要while True,因此不会阻塞主代码。

ESC 停止。

from pynput.keyboard import Key, Controller, Listener

def on_press(key):
    print('{} pressed'.format(key))
    #print(dir(key))

    try:
        if key.char == 'u':
            keyboard.press('w')
            keyboard.release('w')
    except Exception as ex:
        print(ex)
    
def on_release(key):
    print('{} release'.format(key))

    if key == Key.esc:
        # Stop listener
        return False

# --- main ---

keyboard = Controller()

listener = Listener(on_press=on_press, on_release=on_release)

listener.start()

# ... other code ...

listener.join()

顺便说一句:

如果您想在系统中使用全局宏/热键并使用 Linux,那么您可以为此使用特殊程序 AutoKey。它是用 Python 创建的,它有 GUI 来创建宏/脚本/等。

如果您想在系统中使用全局宏/热键并使用 Windows,您可以使用流行的AutoHotKey

如果您想在某些GUI 程序中创建宏/热键,那么您应该为此使用GUI 函数。

【讨论】:

    【解决方案2】:

    查看the documentation,这是下面的sn-p。

    全局热键

    键盘监视器的一个常见用例是对全局热键做出反应。 由于监听器不维护任何状态,热键涉及 多个键必须在某处存储此状态。

    pynput 为此提供了 pynput.keyboard.HotKey 类。它包含两种更新状态的方法,旨在轻松 可与键盘监听器互操作:pynput.keyboard.HotKey.presspynput.keyboard.HotKey.release 可以直接作为 监听器回调。

    [...]

    这将创建一个热键,然后使用一个监听器来更新它的 状态。一旦同时按下所有指定的键, on_activate 将被调用。

    请注意,密钥是通过pynput.keyboard.Listener.canonical 传递的 在传递给HotKey 实例之前。这是为了删除任何 来自键事件的修饰符状态,并使用 多个物理按钮。

    pynput.keyboard.HotKey.parse 方法是一个方便的函数 将快捷方式字符串转换为键集合。请看它的 文档以获取更多信息。

    要注册多个全局热键,请使用便捷类 pynput.keyboard.GlobalHotKeys:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2016-07-12
      相关资源
      最近更新 更多