как дождаться нажатия горячей клавиши в python3 без необходимости открывать окно терминала?

Я хотел бы какую-то блокаду, которая ждет, пока не будет нажата определенная горячая клавиша. Я был бы доволен чем-то вроде ввода («Нажмите Enter, чтобы продолжить»), за исключением того факта, что для этого потребуется, чтобы мой экран находился на странице терминала, я бы хотел, чтобы это подбирало мои ключи, пока я сосредоточился на другом окне.

Решение Луиса Хосе отсюда казалось, что оно может работать, и хорошо, что я уже использую opencv для smoethign, иначе он импортирован: Как завершить цикл while нажатием клавиши? Однако запуск кода ничего для меня не делает, и он не улавливает тот факт, что я нажал "a" и просто остается в петле навсегда.

import cv2

while (1):
    k=0xFF & cv2.waitKey(1)
    if k == ord('a'):
        break

person christina li    schedule 05.12.2018    source источник


Ответы (1)


Приведенный выше код не будет работать, поскольку cv2.waitKey предназначен для работы, когда окно отображения создается с помощью cv2.imshow, и вы хотите остановить отображение. Это имеет смысл, поскольку opencv был разработан как набор инструментов для обработки изображений и видео. Вы можете попробовать использовать пакет pynput.

from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(
            key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(
        key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

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

Когда вы нажимаете клавишу esc, приведенный выше код завершается. Подробнее о пакете можно узнать на странице проекта pynput.

person Shubham Jaiswal    schedule 05.12.2018