python-2.7 - 将参数传递给 Pynput 监听器

标签 python-2.7 parameter-passing listener event-listener pynput

我使用 pynput 监听器来捕获键盘上的按键,但问题是我需要将参数传递给 on_press 和 on_release 函数,但我不知道该怎么做。
您可以在代码中看到,我需要传递客户端套接字,以便向他发送按下/释放的键。

def handle_keyboard_events(self, client_socket):
    keyboard_listener = keyboard.Listener(on_press=self.on_key_press, on_release=self.on_key_release)
    keyboard_listener.start()

def on_key_press(self, key):
    key_press_command = KeyPress(key)
    self.send_message(key_press_command, True, client_socket)

def on_key_release(self, key):
    key_release_command = KeyRelease(key)
    self.send_message(key_release_command, True, client_socket)

最佳答案

我看到你正在使用 self所以你在一个 class 里面.
为什么不用self.client_socket = client_socket在你的构造函数中?

# update your constructor with self.client_socket
def __init__(client_socket, **other_args_of_yours):
    
    # use this object variable when you activate key listener
    self.client_socket = client_socket
或添加 self.client_socket = client_sockethandle_keyboard_events()方法:
def handle_keyboard_events(self, client_socket):
    
    self.client_socket = client_socket # <----- update
    
    keyboard_listener = keyboard.Listener(
        on_press=self.on_key_press, 
        on_release=self.on_key_release
    )
    keyboard_listener.start()
并使用 self.client_socketpressrelease方法
def on_key_press(self, key):
    key_press_command = KeyPress(key)
    self.send_message(key_press_command, True, self.client_socket) # <--- update

def on_key_release(self, key):
    key_release_command = KeyRelease(key)
    self.send_message(key_release_command, True, self.client_socket) # <--- update
或者
如果你真的想通过client_socket给您的 pressrelease方法,你可以试试这个:
def handle_keyboard_events(self, client_socket):
    # use lambda to pass the client socket
    # with this method, after you get the `key` you can pass additional params to on_press and on_release
    keyboard_listener = keyboard.Listener(
        on_press=lambda key: self.on_key_press(key, client_socket), # <--- client socket passed
        on_release=lambda key: self.on_key_release(key, client_socket) # <--- client socket passed
    )
    keyboard_listener.start()

# add client socket as new arg
def on_key_press(self, key, client_socket):
    key_press_command = KeyPress(key)
    self.send_message(key_press_command, True, client_socket) # from params
    
# add client socket as new arg
def on_key_release(self, key, client_socket):
    key_release_command = KeyRelease(key)
    self.send_message(key_release_command, True, client_socket) # from params
你准备好了。

关于python-2.7 - 将参数传递给 Pynput 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52972853/

相关文章:

python - 将训练和测试数据保存在文件中

c - 在 C 中传递链表时如何解决这些冲突类型错误?

javascript - 在 JavaScript 中访问 Java/Servlet/JSP/JSTL/EL 变量

python - 如何使用 rPython 将参数从 R 输入到 Python?

java - 在 EJB jar 中,在哪里放置代码以在初始化时只执行一次?

java - Spring Batch - 了解 block 大小和 ItemReadListener 之间的行为

python - BeautifulSoup Python 脚本不再适用于挖掘简单的字段

python-2.7 - 根据索引合并行

python-2.7 - 只读文件系统 : '/dev/null' while running google-cloud-sdk project

java - 在actionperformed监听器中创建jpanel?