Python 来自pynput的键盘侦听器

Python 来自pynput的键盘侦听器,python,keyboard,Python,Keyboard,我正在尝试将键盘侦听器导入到我的类中,但不断得到一个 NameError: name 'on_press' is not defined 这是我的密码: from pynput import keyboard class game_code: with keyboard.Listener(on_press=on_press) as listener: listener.join() def check_key_press(self,key):

我正在尝试将键盘侦听器导入到我的类中,但不断得到一个

NameError: name 'on_press' is not defined
这是我的密码:

from pynput import keyboard
class game_code:

    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()

    def check_key_press(self,key):
       try: k = key.char
       except: k = key.name

       if k in ['up', 'down', 'left', 'right']:
          self.key = keys.append(k)
          return True

        else:
          return False

也不是100%确定with语句是如何工作的。

我使用了他们在线文档的格式:


我使用了他们在线文档的格式:


我将侦听器粘贴到我的类代码中,仍然得到一个NameError。但是,当在类之外的其他模块中运行时,它工作正常。这和在课堂上使用这个有什么关系吗?在我这方面很好。我在这里用。从课堂上拿出来试试。这可能是因为你没有像我上面所说的那样在新闻界下定义。它需要一个定义函数。我将侦听器粘贴到我的类代码中,但仍然得到一个NameError。但是,当在类之外的其他模块中运行时,它工作正常。这和在课堂上使用这个有什么关系吗?在我这方面很好。我在这里用。从课堂上拿出来试试。这可能是因为你没有像我上面所说的那样在新闻界下定义。它需要一个定义函数
from pynput.keyboard import Key, Listener

def on_press(key):
    #print('{0} pressed'.format(
        #key))
    check_key(key)

def on_release(key):
    #print('{0} release'.format(
       # key))
    if key == Key.esc:
        # Stop listener
        return False

def check_key(key):
    if key in [Key.up, Key.down, Key.left, Key.right]: 
        print('YES')

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()