使用列表创建Tkinter Label时触发AttributeError的问题求助
问题原因分析
你遇到的AttributeError: 'int' object has no attribute 'config'错误,核心是二维列表的索引不匹配,导致你调用config的元素还是初始的整数0,而非Label对象。
具体来看:
- 你初始化
classnumlabel为[[0 for i in range(6)] for j in range(8)],这是一个8行(索引0-7)、6列(索引0-5)的二维列表,所有元素初始值为0。 - 创建Label时,循环用的是
for i in range(1, 8)(行索引1-7)、for j in range(1, 6)(列索引1-5),也就是说只有classnumlabel[1-7][1-5]被赋值为Label对象,第0列(索引0)和第0行(索引0)的元素仍然是初始的0。 - 最后修改文本的循环里,
i的范围是range(5)(即0-4),访问classnumlabel[j][i]会命中classnumlabel[j][0]——这个位置的元素还是整数0,自然没有config方法。
修复方案
调整修改文本时的索引对应关系,确保访问的是已经被赋值为Label的位置:
原错误循环:
for i in range(5): for j in range(1, 8): dir = db.reference(selectclass +'/'+ day[i] +'/'+ 'class' + str(j)) print(selectclass +'/'+ day[i] +'/'+ 'class' + str(j)) classnumlabel[j][i].config(text=dir.get())
修改后:
for i in range(5): for j in range(1, 8): dir = db.reference(selectclass +'/'+ day[i] +'/'+ 'class' + str(j)) print(selectclass +'/'+ day[i] +'/'+ 'class' + str(j)) # 将i+1,对应创建Label时的列索引1-5 classnumlabel[j][i+1].config(text=dir.get())
另外,建议初始化二维列表时直接匹配实际使用的索引范围,避免冗余的0元素,让逻辑更清晰:
# 行索引0-6对应原j=1-7,列索引0-4对应原i=1-5 classnumlabel = [[0 for i in range(5)] for j in range(7)] # 创建Label时改用0-based索引 for j in range(7): for i in range(5): classnumlabel[j][i] = Label(win, width=10, text="value") classnumlabel[j][i].grid(row=j+5, column=i+2) # 修改文本时直接对应索引 for i in range(5): for j in range(7): dir = db.reference(selectclass +'/'+ day[i] +'/'+ 'class' + str(j+1)) classnumlabel[j][i].config(text=dir.get())
内容的提问来源于stack exchange,提问作者YoulmooSelf
相关产品推荐
相关产品推荐

