首页 > 解决方案 > 关于python中鼠标和键盘事件的问题

问题描述

from pynput.keyboard import Key, Controller as KeyboardController
from pynput.mouse import Button, Controller as MouseController
from pynput.keyboard import Key, Listener

keyboard = KeyboardController()
mouse = MouseController()

def on_press(key):
    if key.char == 'q':
        print(mouse.position)
        return True

# Collect events until released
with Listener(
        on_press=on_press) as listener:
    listener.join()

如果我按下字母 q,我制作了这个简单的脚本来返回鼠标的位置。它工作正常,直到我按下不是字符的东西,例如 Enter 键。我一直在四处寻找,但找不到实现如果“单击某些按钮”来做到这一点的好方法。我怎样才能解决这个问题?

标签: pythonpynput

解决方案


显然,返回的键对象on_press没有char属性,除非您实际按下了字符键。因此,您必须检查该属性是否存在。您可以使用hasattr做到这一点:

from pynput.keyboard import Key, Controller as KeyboardController
from pynput.mouse import Button, Controller as MouseController
from pynput.keyboard import Key, Listener

keyboard = KeyboardController()
mouse = MouseController()

def on_press(key):
    if hasattr(key, 'char'):    
        if key.char == 'q':
            print(mouse.position)
            return True

# Collect events until released
with Listener(
        on_press=on_press) as listener:
    listener.join()

推荐阅读