#python #toggle #cv2
Вопрос:
У меня есть бесконечный цикл while, работающий до тех пор, пока я не нажму клавишу, чтобы выйти из него. В настоящее время у меня есть оператор if, который переключает логическое значение, если я нажимаю клавишу.
if keyboard.is_pressed('s'): armed = not armed
Когда я запускаю цикл и нажимаю клавишу, иногда она активируется дважды, потому что клавиша была нажата достаточно долго во время нажатия, чтобы быть активированной в следующей итерации цикла while.
Существуют ли какие-либо решения, которые не предполагают задержки в цикле while? Это сценарий на основе cv2, поэтому любые задержки приведут к снижению частоты кадров в секунду при съемке видео.
Комментарии:
1. Я предполагаю, что вы используете
armed
это в качестве условия для выхода из цикла while… Почему бы просто не установить его наFalse
значение вместо того, чтобы инвертировать его?2. Извините за путаницу, но я использую «вооружен» в качестве переключателя для другой системы, которая находится в массивном цикле while.
Ответ №1:
Вы могли бы отслеживать время, в течение которого вы обнаруживаете прессу. Все, что находится в пределах временного интервала оттуда, игнорируется.
import time last_press = time.time() key_delay_seconds = 1.0 armed = False while True: if keyboard.is_pressed('s'): if cur_time := time.time() gt; last_press key_delay_seconds: armed = not armed last_press = cur_time print(armed)