【问题标题】:Python: How to toggle a boolean in a while loop after pressing a key without it double activating?Python:如何在没有双重激活的情况下按下一个键后在while循环中切换一个布尔值?
【发布时间】:2022-01-03 09:55:53
【问题描述】:

我有一个无限循环运行,直到我按下一个键退出它。目前,我有一个 if 语句,如果我按下一个键,它会切换一个布尔值。

if keyboard.is_pressed('s'):
    armed = not armed

当我运行循环并按下按键时,有时它会激活两次,因为按键在按下期间按下的时间足够长,可以在 while 循环的下一次迭代中激活。

是否有任何不涉及在 while 循环中延迟的解决方案?它是一个基于 cv2 的脚本,因此任何延迟都会导致所捕获视频的 fps 下降。

【问题讨论】:

  • 我假设您使用 armed 作为退出 while 循环的条件...为什么不将其设置为 False 而不是反转它?
  • 抱歉造成混乱,但我正在使用“武装”作为另一个系统的切换开关,该系统处于大规模 while 循环中。

标签: python toggle cv2


【解决方案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() > last_press + key_delay_seconds:
            armed = not armed
            last_press = cur_time
            print(armed)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2019-10-29
    • 1970-01-01
    相关资源
    最近更新 更多