Как я могу проверить наличие ключа в Python

1

Мне нужно проверить, нажаты ли клавиши со стрелками на ПК и что-то делать, пока он удерживается. Например, если:

если стрелка вверх удерживается, консоль будет печатать: вверх, вверх, вверх, вверх. -until. Как я могу это сделать? Я пробовал несколько библиотек, но каждый из них, кажется, регистрирует только щелчок, но не повторяется.

Спасибо!

Теги:
python-3.x

2 ответа

2

Вы можете попробовать ysing библиотеку Pynput и прослушиватель клавиатуры.

Я сделал фрагмент для тестирования, надеюсь, что это поможет!

from pynput import keyboard

def keyPress(key):
    if key == keyboard.Key.up:
        print('Up pressed')

with keyboard.Listener(
        on_press=keyPress) as kb:
    kb.join()

И не забывайте

pip install pynput

РЕДАКТИРОВАТЬ:

Чтобы увидеть все нажатия клавиш, вы можете попробовать изменить обратный вызов:

try:
    print('{0} pressed'.format(
        key.char))
except :
    print('key {0} pressed'.format(
        key))

Блок исключений - это всего лишь способ обхода специальных клавиш

  • 0
    Спасибо за немедленный ответ и извините за вопрос новичка, но где вы это запустите? Когда я запускаю это в pycharm и нажимаю клавишу «вверх», я только перемещаю курсор вверх в разделе кода. Когда я запускаю это через терминал, он печатает ^ [[A ... Я делаю что-то не так? (Я использую Mac)
  • 0
    Вы можете запустить этот скрипт где угодно на самом деле, я проверил его с помощью IDLE. Поскольку этот фрагмент является просто прослушивателем с клавиатуры, все нажатия клавиш должны выполнять те же функции, если вы нажмете UP, он все равно будет прокручиваться вверх, но клавиатура вызовет обратный вызов on_press и выполнит дополнительные действия, которые вы сообщаете. Чтобы получить более четкое представление, вы можете попробовать фрагмент, отредактированный в ответе.
Показать ещё 4 комментария
0

Не уверен в других платформах, но в Windows есть библиотека conio которую вы можете использовать в C:

#include<stdio.h>
#include<conio.h>

int main() {
    while (1) {
        printf("%c", getch());
    }
    return 0;
}

и с Cython вы можете использовать эту getch() таким же образом, если вы связываетесь с библиотекой conio.

Это должно быть то, что пакет getch делает для вас кросс-платформенным способом даже с помощью библиотеки termios на платформах POSIX.

Если вы не хотите использовать нестандартную библиотеку, то в итоге вы получите код, зависящий от платформы, например, пакет getch для вас:

import msvcrt
while True:
    print(msvcrt.getch())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню