【问题标题】:button pressed stays true按下的按钮保持真实
【发布时间】:2021-06-01 14:55:19
【问题描述】:

我的代码应该在按键盘上的字母“u”之后按两次“p”,.这也有效。但是当我快速连续按两次“u”时,代码会挂断,并且函数会以某种方式继续调用自己,即使我根本没有按“u”。有谁知道这可能是什么原因?

from pynput.keyboard import Listener
import keyboard  # using module keyboard
import time



def on_press(key):  # The function that's called when a key is pressed
   
    if keyboard.is_pressed('u'): #'u' is pressed 
            
            keyboard.press('p')
            keyboard.release('p')
            time.sleep(0.01)
            keyboard.press('p')
            keyboard.release('p')
            time.sleep(1)
          
    else:
            pass



with Listener(on_press=on_press) as listener:  # Create an instance of Listener
    listener.join()  # Join the listener thread to the main thread to keep waiting for keys

【问题讨论】:

  • 是 'u' 在按下 'p' 时仍然算作按下的问题,因为您仍在处理 'u' 被按下的处理程序中(即您已经确认 'u'被按下并且当你回到这个功能时没有任何改变)?
  • @Kemp 是的,我认为这就是问题所在......
  • 你可能想要做一些事情来跟踪'u'的状态,所以如果你设置了“u ispressed”标志然后回到函数并且它仍然设置你不执行您的额外按键。您需要注册以监听发布以重置该标志。
  • 我解决了这个问题。我用“key == 'u'”更改了“Keyboard.is_pressed('u') == true”。现在它完美运行了!
  • 恭喜!

标签: python listener keyboard-events


【解决方案1】:

这可能是因为keyboard.is_pressed('u') 下的代码由于time.sleep 调用而需要1.001 秒(或稍长一些)来执行。如果您在不到 1.001 秒内按 U 两次,则会中断,因为该函数在您再次调用之前无法完成。

【讨论】:

  • 但如果我删除“time.sleep(1)”,问题会更频繁地出现(即即使我没有连续按“u”这么快)
猜你喜欢
  • 1970-01-01
  • 2018-07-27
  • 2013-10-12
  • 2013-08-06
  • 1970-01-01
  • 2023-03-15
  • 2012-12-23
  • 2014-09-04
  • 1970-01-01
相关资源
最近更新 更多