【问题标题】:Why do i get this error in the following code? IndexError: list assignment index out of range为什么在以下代码中会出现此错误? IndexError:列表分配索引超出范围
【发布时间】:2020-10-21 23:36:26
【问题描述】:
from tkinter import *
alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def callback(x):
    label.configure(text='Button {} clicked'.format(alphabet[x]))

root= Tk()

label = Label()
label.grid(row=1,column=0, columnspan=26)

buttons= []*26  #create a list to hold 26 buttons
for i in range(26):
buttons[i] = Button(text=alphabet[i], command = lambda x=i: callback(x))

buttons[i].grid(row=0,column=i)

mainloop()

运行此代码时会产生以下错误: 回溯(最近一次通话最后): 文件“./alphabet_click.py”,第 16 行,在 按钮[i] = Button(text=alphabet[i], command = lambda x=i: callback(x)) IndexError: 列表赋值索引超出范围

我需要做什么来解决这个错误?

【问题讨论】:

  • []*26 仍然是一个空列表...

标签: python-3.x


【解决方案1】:

正如@jonsharpe 所说,buttons 等于 [] 之后 buttons= []*26。所以只需删除 *26 并将 buttons[i] = Button(...) 替换为 buttons.append(Button(...)) 或使用地图:

buttons = list(map(lambda letter: Button(text=letter,
                                         command=callback), alphabet))

【讨论】:

  • 这非常有效。非常感谢@qouify。
【解决方案2】:

创建一个字母列表并删除按钮列表即可

from tkinter import *
alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
alphabetlist = list(alphabet)
print(alphabetlist)

def callback(x):
    label.configure(text='Button {} clicked'.format(alphabet[x]))

root= Tk()

label = Label()
label.grid(row=1,column=0, columnspan=26)

for i in range(len(alphabetlist)):
    buttons = Button(text=alphabetlist[i], command = lambda x=i: callback(x))
    buttons.grid(row=0,column=i)

mainloop()

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 2019-01-06
    • 2019-07-26
    • 1970-01-01
    • 2017-12-02
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多