Вопрос о событиях мыши и клавиатуры в 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. Я искал вокруг, но не смог найти хороших способов реализации, если для этого была нажата определенная кнопка. Как я могу это исправить?


person WildDracula    schedule 21.08.2020    source источник
comment
Поиск в строке событий кнопок. А еще лучше, проработайте учебник по связанным пакетам.   -  person Prune    schedule 22.08.2020
comment
Что именно происходит, когда вы нажимаете Enter?   -  person rcriii    schedule 22.08.2020
comment
@rcriii Я получаю сообщение об ошибке «Ключевой объект» не имеет атрибута «char». Я попытался прочитать документацию pynput.keyboard, но не смог найти хороший способ сделать это. Должен быть простой способ написать это, если каким-то образом, но я его вообще не вижу. Если я делаю ``` if key == keyboard.pressed('q') ``` ничего не происходит, когда я нажимаю q. Я пробовал кучу комбинаций на этом, но пока ничего не получилось. Любые идеи?   -  person WildDracula    schedule 22.08.2020
comment
Попробуйте, если «char» в ключе.__dict__: затем проверьте «q».   -  person rcriii    schedule 23.08.2020


Ответы (1)


Очевидно, ключевой объект, возвращенный в 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()
person rcriii    schedule 24.08.2020