You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pynput报错Controller无is_pressed属性的原因及解决方法

报错核心原因
  • 接口调用错误:is_pressed()是第三方keyboard库的专属方法,pynput.keyboard.Controller类的作用仅为模拟键盘输入事件,本身没有提供检测全局按键状态的接口,直接调用必然抛出属性不存在的错误,和你有没有按q键没有关系。
  • 导入存在隐患:你先后从pynput.mouse和pynput.keyboard导入了同名的Controller类,后导入的类会直接覆盖前者,很容易出现控制器调用错位的问题。
  • 实现逻辑偏差:pynput的全局按键检测需要通过独立的监听器组件实现,不能通过输入控制类轮询按键状态。
修复后完整代码
from pynput.mouse import Button, Controller as MouseController
from pynput.keyboard import Key, Controller as KeyboardController, Listener
import time

# 初始化输入控制器,用别名避免同名覆盖
keyboard = KeyboardController()
mouse = MouseController()
# 连点循环运行标记
running = True

def on_press(key):
    global running
    # 匹配q键按下事件
    try:
        if key.char == 'q':
            running = False
            # 返回False终止监听器
            return False
    except AttributeError:
        # 忽略功能键、组合键触发的属性错误,不影响主逻辑
        pass

# 启动后台非阻塞键盘监听器
listener = Listener(on_press=on_press)
listener.start()

# 连点主逻辑
while running:
    # 修改此处数值调整连点间隔,单位为秒,例如设为0.01即为每秒点击100次
    time.sleep(10)
    mouse.click(Button.left)

# 程序退出前停止监听器,释放资源
listener.stop()
使用说明
  • 监听器运行在独立后台线程,不管连点速度多快,按下q键都会立刻修改退出标记,当前循环执行完就会自动终止程序,不需要强制关机。
  • 不要混用pynput和keyboard库的接口,两个库的调用逻辑完全独立,混写很容易出现属性不存在的报错。
  • 如果需要调整连点速度,直接修改time.sleep()的传入参数即可,数值越小点击速度越快,退出逻辑不受点击速度影响。

内容的提问来源于stack exchange,提问作者PythonLover4119

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:54:16