Я делаю программу типа секундомера на Python, и я хотел бы знать, как определить, нажата ли клавиша (например, p для паузы и s для остановки), и я не хотел бы, чтобы это было что-то вроде raw_input, которое ждет ввод пользователя перед продолжением выполнения. Кто-нибудь знает, как это сделать в цикле while?
Кроме того, я хотел бы сделать этот кроссплатформенный, но если это невозможно, то моя основная цель разработки - Linux.
python
python-2.7
keypress
detect
лобуо
источник
источник
Ответы:
Python имеет модуль клавиатуры с множеством функций. Установите его, возможно, с помощью этой команды:
Затем используйте его в коде, например:
источник
keyboard
по-видимому, требуется root в linux: /Для тех, кто работает с окнами и изо всех сил пытается найти рабочий ответ, вот мой: pynput
Приведенная выше функция будет печатать, какую бы клавишу вы ни нажимали, плюс запускает действие, когда вы отпускаете клавишу «esc». Документация по клавиатуре здесь для более разнообразного использования.
Маркус фон Броуди выделил потенциальную проблему, а именно: для этого ответа не требуется, чтобы вы были в текущем окне, чтобы этот скрипт был активирован, решение для Windows:
источник
Поскольку OP упоминает raw_input - это означает, что ему нужно решение cli. Linux: curses - это то, что вам нужно (Windows PDCurses). Curses, это графический API для программного обеспечения cli, вы можете добиться большего, чем просто обнаруживать ключевые события.
Этот код будет обнаруживать клавиши до тех пор, пока не будет нажата новая строка.
источник
termios
и так далее ...import os
, чтобы иметь возможность выйти из примера.win.nodelay(False)
вместо тогоTrue
, он не будет генерировать миллион исключений в секунду.С
keyboard
модулем можно сделать больше вещей .Вот некоторые из методов:
Способ №1:
Используя функцию
read_key()
:Это приведет к разрыву цикла при нажатии pклавиши.
Способ №2:
Использование функции
wait
:Он будет ждать, пока вы нажмете, pи продолжит вводить код по мере его нажатия.
Способ №3:
Используя функцию
on_press_key
:Ему нужна функция обратного вызова. Я использовал,
_
потому что функция клавиатуры возвращает этой функции событие клавиатуры.После выполнения он запустит функцию при нажатии клавиши. Вы можете остановить все перехватчики, запустив эту строку:
Метод №4:
На этот метод уже ответил user8167727, но я не согласен с кодом, который они сделали. Он будет использовать функцию,
is_pressed
но по-другому:При pнажатии он разрывает петлю .
Ноты:
keyboard
будет читать нажатия клавиш со всей ОС.keyboard
требует рут в Linuxисточник
keyboard.wait()
для ожидания более одной клавиши и продолжения, если одна из них будет нажатаwait()
не предоставляет эту функцию. Вам придется использоватьkeyboard.read_key()
с условием if, упакованным в цикл while. См. Метод №1suppress
использование ключевых словkeyboard.read_key()
, когда его использовать, а когда нет ....Для Windows вы можете использовать
msvcrt
так:источник
Используйте этот код, чтобы узнать, какая клавиша нажата
источник
Используйте PyGame, чтобы получить окно, а затем вы можете получить ключевые события.
Для письма
p
:источник
Итак, я сделал эту ... своего рода игру ... на основе этого сообщения (используя библиотеку msvcr и Python 3.7).
Ниже приводится «основная функция» игры - обнаружение нажатых клавиш:
Если вам нужен полный исходный код программы, вы можете увидеть его или скачать отсюда:
Игра с секретным ключом (GitHub)
(примечание: секретное нажатие клавиши: Ctrl+ F12)
Я надеюсь, что вы можете послужить примером и помочь тем, кто пришел ознакомиться с этой информацией.
источник
Я бы посоветовал вам использовать PyGame и добавить дескриптор события.
http://www.pygame.org/docs/ref/event.html
источник
Это из пакета openCV. Он обнаруживает нажатие клавиши без ожидания.
источник