Вопрос о событиях мыши и клавиатуры в python

#python #pynput

#python #pynput

Вопрос:

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

Комментарии:

1. Выполните поиск событий кнопок в строке. А еще лучше, изучите руководство по связанным пакетам.

2. Что именно происходит, когда вы нажимаете Enter?

3. @rcriii Я получаю сообщение об ошибке «Объект ‘Key’ не имеет атрибута ‘char'». Я попытался прочитать документацию «pynput.keyboard», но он не смог найти хороший способ сделать это. Должен быть простой способ каким-то образом записать это «если», но я его вообще не вижу. Если я сделаю «` if key == keyboard.pressed(‘q’) «, ничего не произойдет, когда я нажму «q». Я перепробовал кучу комбинаций для этого «если», но пока ничего не сработало. Есть идеи?

4. Попробуйте, если в ключе ‘char’.__dict__: затем проверьте наличие ‘q’.

Ответ №1:

Очевидно, что объект key, возвращаемый в 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()