它只是不起作用,我收到一条错误消息
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 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
函数。
查看文档,下面是其中的一个片段。
全局热键
键盘监视器的一个常见用例是对全局热键做出反应。 由于侦听器不维护任何状态,因此涉及的热键 多个键必须在某处存储此状态。
pynput 为此提供了
类。它包含两种更新状态的方法,旨在轻松 可与键盘监听器互操作:pynput.keyboard.HotKey
和pynput.keyboard.HotKey.press
可以直接传递为 监听器回调。pynput.keyboard.HotKey.release
[...]
这将创建一个热键,然后使用侦听器来更新其 状态。一旦同时按下所有指定的键,
将被调用。on_activate
请注意,密钥是通过
传递的 在传递给pynput.keyboard.Listener.canonical
实例之前。这是为了删除任何 从按键事件中获取修改器状态,并使用以下规范化修改器 不止一个物理按钮。HotKey
方法
是一个方便的函数 将快捷方式字符串转换为按键集合。请看它的 文档以获取更多信息。pynput.keyboard.HotKey.parse
要注册多个全局热键,请使用便利类
:pynput.keyboard.GlobalHotKeys
我为此制作了一个极其简单的可选库:envoke
这是一个简单的例子:
from envoke import envoke
# Create a macro sequence
c = envoke()
c.a(interval=0.5).b(interval=0.5).key('5', interval=0.1)
# Run the macro
c.run(start_delay=3.5)