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

Python Tkinter循环生成组件出现list index out of range错误如何解决

报错原因
  • 你把self.entries和self.buttons两个列表的初始化代码放在了for循环内部,每次循环都会清空列表重新创建,这是核心问题。
  • 当第一次循环x=0时,列表清空后添加1个元素,下标0可以正常访问;第二次循环x=1时,列表先被清空成空列表,再添加1个元素,此时列表只有下标0的元素,你去访问self.entries[1]自然就超出索引范围。
  • range参数为1的时候只会执行一次循环,不会触发清空后访问高下标的情况,所以能正常运行。
解决方案
  • 把两个列表的初始化代码移到for循环外面,只初始化一次,每次循环往同一个列表里追加元素即可。
  • 额外优化建议:创建Entry和Button的时候指定父组件为当前Frame实例,避免组件层级混乱,同时记得把Frame实例挂载到父窗口,符合Tkinter组件层级规范。
修正后可运行代码
from tkinter import *

class Application(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master
        # 将当前Frame挂载到父窗口,否则内部组件可能无法正常显示
        self.pack()
        self.submit()

    def submit(self):
        # 列表初始化移到循环外,全局只执行一次
        self.entries = []
        self.buttons = []
        for x in range(2):
            # 指定父组件为当前Frame实例
            e = Entry(self)
            self.entries.append(e)
            self.entries[x].grid(row=x, column=0)
            b = Button(self, text='SUBMIT', command=lambda x=x: print(self.entries[x].get()))
            self.buttons.append(b)
            self.buttons[x].grid(row=x, column=1)

root = Tk()
app = Application(root)
app.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:15:03