【问题标题】:Returning an argument on key press detection using Pynput使用 Pynput 返回有关按键检测的参数
【发布时间】:2020-12-16 03:25:51
【问题描述】:

from pynput.keyboard import Listener
import time

def on_press(key, run):  # The function that's called when a key is pressed
    print( run)
    print("Key pressed: {0}".format(key))
    if 'char' in dir(key):     #check if char method exists,
        if key.char == 'q':
            print("quit")
            run = False

run = True
listener = Listener(on_press=lambda event: on_press(event, run=run))
listener.start()

while run:
    print("do things here")
    time.sleep(2)
    
#stop the listener...
listener.stop()

我刚刚发现了一个与 Pynput 相关的简单事情。基本上想做“事情(基本上是运行LED)”,但听键盘输入(例如q 表示退出),然后停止“事情”。我已经走了这么远,但似乎无法让'q'阻止它。有没有一种简单的方法来解决它,甚至有更好的方法来解决它?

【问题讨论】:

    标签: python pynput


    【解决方案1】:

    问题在于,当您将其设置为 false 时,您并未修改函数中的运行变量。您正在修改一个不同的变量,也称为 run,它只存在于函数中,与您在代码中声明的变量不同。这与变量的范围有关。函数外声明的run变量存在于全局作用域,函数内部的变量存在于函数的局部作用域。如果在函数范围内声明的变量与全局范围内的变量同名,则函数内对变量名的每个引用都指向在局部范围内声明的变量。

    解决此问题的最简单方法是使在全局范围内声明的 run 变量在函数范围内成为全局变量。

    from pynput.keyboard import Listener
    import time
    
    def on_press(key):  # The function that's called when a key is pressed
        global run
        print("Key pressed: {0}".format(key))
        if 'char' in dir(key):     #check if char method exists,
            if key.char == 'q':
                print("quit")
                run = False
    
    run = True
    listener = Listener(on_press=lambda event: on_press(event))
    listener.start()
    
    while run:
        print("do things here")
        time.sleep(2)
        
    #stop the listener...
    listener.stop()
    

    【讨论】:

      【解决方案2】:

      就是这样,你明白了!意识到我也不需要传递任何争论,所以更简化了如下:

      from pynput.keyboard import Listener
      import time
      
      def on_press(key):  # The function that's called when a key is pressed
          global run
          print( run)
          print("Key pressed: {0}".format(key))
          if 'char' in dir(key):     #check if char method exists,
              if key.char == 'q':
                  print("quit")
                  run = False
      
      run = True
      listener = Listener(on_press=on_press)
      listener.start()
      
      while run:
          print("do things here")
          time.sleep(2)
          
      #stop the listener...
      listener.stop()

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        • 2020-02-11
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多