【问题标题】:How is the list index out of range?列表索引如何超出范围?
【发布时间】:2021-09-15 10:57:01
【问题描述】:

当我因为我认为没有任何原因而收到此错误时,我在 Tkinter python 中玩了一下。

    print(self.entries[x])
IndexError: list index out of range

我的代码:

from tkinter import *

class Application(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.submit()

    def submit(self):
        for x in range(2):
            self.entries = []
            self.buttons = []
            e = Entry()
            self.entries.append(e)
            self.entries[x].grid(row=x, column=0)
            b = Button(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()

我们的目标是通过这个单一循环创建多行条目并提交按钮。我已经尝试删除函数中所有内容前面的所有自我,但无济于事。

如果 for 循环中的 range() 为 1,则一切正常,但对于任何其他数字均无效。有人可以解释一下吗?我高中的 1 年课程并没有让我适应这种东西。

【问题讨论】:

  • self.entries = []self.buttons = []移到for循环之前
  • 也可以用e.grid(...)代替self.entries[x].grid(...),同样前self.buttons[x].grid(...)

标签: python-3.x tkinter


【解决方案1】:

每次 for 循环运行时,您都会不断重置 self.entriesself.buttons。您需要在 for 循环之前移动 self.entries = []self.buttons = [],如下所示:

from tkinter import *

class Application(Frame):
    def __init__(self, master):
        super().__init__(master)
        # self.master = master # Useless
        self.submit()

    def submit(self):
        self.entries = []
        self.buttons = []
        for x in range(2):
            e = Entry(self)
            e.grid(row=x, column=0)
            self.entries.append(e)
            b = Button(self, text="SUBMIT", command=lambda x=x: print(self.entries[x].get()))
            b.grid(row=x, column=1)
            self.buttons.append(b)

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

还有几件事:

  • 您可以使用e.grid(...) 代替self.entries[x].grid(...)
  • 在创建条目和按钮时,您从未为 master 参数传递任何内容。
  • 你继承自tk.Frame,但从未在其中放入任何东西,甚至没有调用app.pack(...)/app.grid(...)
  • 还请您import tkinter as tk 而不是from tkinter import *

【讨论】:

  • 说实话,master和从tk.Frame导入都是我完全看不懂的东西。文档只是告诉我这样做...但是感谢您的出色回答。
猜你喜欢
  • 1970-01-01
  • 2018-12-16
  • 2011-06-14
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多