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

Python实现Skribbl.io自动绘图时,调用数组坐标移动鼠标触发'int' object is not subscriptable错误的求助

解决你的Skribbl.io绘图脚本错误

首先,直接触发报错的原因是下标访问顺序写错了:

在draw()函数里,你写的pixels[b[c]]完全不符合逻辑——b是一个整数(外层循环的计数器,比如0、1、2...),整数是不能用下标访问的(比如0[c]没有任何意义),这就导致了TypeError: 'int' object is not subscriptable。

正确的写法应该是先取pixels中第b个元素(对应某一种颜色的坐标列表,格式是[x1,y1,x2,y2,...]),再从这个列表里取第c和c+1位的坐标,也就是:

mouse.move(pixels[b][c], pixels[b][c+1], absolute=True, duration=0)

除此之外,我还发现了几个可能导致程序异常或功能不符合预期的问题,一起帮你修正:

1. 颜色判断的逻辑错误

在getcoords()里的if条件中,你用了&(按位与运算符),这不是判断多个条件同时成立的正确方式,应该用and(逻辑与)。另外,你第三个颜色判断写错了通道:cv2.imread读取的图像是BGR顺序,红色是第三个通道(索引2),你写成了img[i, j, 1] == red,应该改成img[i, j, 2] == red。

修正后的判断条件:

if img[i, j, 0] == blue and img[i, j, 1] == green and img[i, j, 2] == red:

2. pixels数组初始化问题

你的代码里没有初始化pixels数组,直接用pixels[v].append(...)会导致索引越界错误(因为一开始pixels是空列表,没有第v个元素)。需要在每次调用getcoords()前,先给pixels添加一个空列表,对应当前颜色的坐标集合。

修正后的外层循环:

pixels = []  # 初始化空数组
length = len(palettedata) 
a = 0 
v = 0 
while a < length: 
    pixels.append([])  # 为当前颜色创建空的坐标列表
    getcoords() 
    a += 3 
    v += 1

3. 安全退出的逻辑优化

原来的break只能跳出内层的while c循环,无法终止整个绘图过程。改成直接return可以退出draw()函数,终止所有循环。

修正后的draw()函数:

def draw(): 
    b = 0 
    while b < len(pixels): 
        c = 0 
        while c < len(pixels[b]): 
            mouse.move(pixels[b][c], pixels[b][c+1], absolute=True, duration=0)
            mouse.click(button='left') 
            if keyboard.is_pressed('q'): # Failsafe 
                return  # 直接退出函数,停止绘图
            c += 2 
        b += 1 

把这些修正点整合后,你的代码应该就能正常运行了。作为编程新手,能想到用抖动处理+模拟鼠标的思路来实现Skribbl.io绘图已经很棒啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:47:30