在使用 `pynput` 监听鼠标事件时,如果 `CTRL + C` 无法停止程序,我们可以使用 `pynput` 提供的停止监听方法。你可以在程序中添加一个键盘监听器,当检测到特定按键(例如 `ESC` 键)时,停止鼠标监听。
下面是一个改进后的示例代码,添加了一个键盘监听器来停止鼠标监听:
from pynput import mouse, keyboard
import threading
# 定义一个全局变量来控制监听器的运行
running = True
def on_move(x, y):
if running:
print(f'鼠标移动到 ({x}, {y})')
def on_click(x, y, button, pressed):
if running:
if pressed:
print(f'鼠标点击在 ({x}, {y}) 按钮 {button}')
def on_scroll(x, y, dx, dy):
if running:
print(f'鼠标滚动在 ({x}, {y})')
def on_press(key):
global running
try:
if key == keyboard.Key.esc:
print("监听器停止")
running = False
return False # 停止键盘监听器
except AttributeError:
pass
# 启动鼠标监听线程
mouse_listener = mouse.Listener(on_move=on_move, on_click=on_click, on_scroll=on_scroll)
mouse_listener.start()
# 启动键盘监听线程
keyboard_listener = keyboard.Listener(on_press=on_press)
keyboard_listener.start()
# 保持主线程运行,直到键盘监听器停止
keyboard_listener.join()
mouse_listener.stop() # 停止鼠标监听器
print("程序已停止")
在这个脚本中,键盘监听器会监听按键事件,当检测到 `ESC` 键被按下时,会将 `running` 设置为 `False` 并停止键盘监听器。鼠标监听器的回调函数在检测到 `running` 为 `False` 后会停止打印信息。最后,主线程会等待键盘监听器停止,然后停止鼠标监听器。
这样,你就可以通过按下 `ESC` 键来停止监听器,避免使用 `CTRL + C` 无效的情况。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |