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

Python Tkinter代码运行报IndexError列表索引越界错误的原因及修复方法

报错原因
  • 未正确存储画布矩形的ID:你定义的rectangle是自定义函数名,不是canvas.create_rectangle()返回的图形元素唯一ID。调用canvas.coords(rectangle)时无法匹配到对应的画布元素,获取到的坐标列表要么为空,要么长度不符合预期。
  • 索引超出列表范围:即使正确获取到矩形的坐标,canvas.coords()返回的单个矩形坐标是长度为4的列表,对应[左上角x坐标, 左上角y坐标, 右下角x坐标, 右下角y坐标],合法索引仅为0/1/2/3,你调用surdsk[20]远超出了列表的最大索引值,直接触发越界报错。
修复方案

修改逻辑如下:

  1. 调整rectangle函数,返回创建的矩形ID,用变量存储供后续操作使用
  2. 左移边界判断改为取矩形左上角x坐标(对应索引0),判断是否大于画布左边界阈值
  3. 所有操作画布元素的方法都传入正确的矩形ID,而非函数名

修复后的完整代码:

from tkinter import *
import random

def rectangle():
    # 返回创建的矩形ID
    return canvas.create_rectangle(20, 20, 20+20, 20+30, fill='red')

def MoveLeft(action):
    surdsk = canvas.coords(rect_id)
    # 取左上角x坐标判断是否大于左边界阈值5
    if surdsk[0] > 5:
        canvas.move(rect_id, -10, 0)

canvas = Canvas()
canvas.pack()
canvas.bind_all('<Key-Left>', MoveLeft)
# 存储矩形ID到全局变量
rect_id = rectangle()
mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:04