Python报错:'str' object has no attribute 'config'——Tkinter网格标签赋值问题
解决Tkinter中'str' object has no attribute 'config'报错问题
嘿,我一眼就看到问题出在哪了——你在fill_auto函数里拼接出来的box只是个普通字符串(比如"lbl12"),它并不是你创建的Label控件实例啊!字符串当然没有config方法,这就是报错的根源。
咱们换个思路,不用三个单独的字典来存标签,改用一个二维字典来统一管理所有Label,这样就能直接通过行和列索引拿到对应的控件对象,根本不用拼接字符串找变量名。
修改后的完整代码如下:
from tkinter import * import random # 用二维字典存储所有标签,结构为:lbl[行号][列号] = Label对象 lbl = {} def fill_auto(): for i in range(1, 6): rd_row = random.randrange(1, 6) rd_col = random.randrange(1, 4) rd_num = random.randrange(1, 16) print(rd_row, rd_col, rd_num) # 直接通过行、列索引获取目标Label target_label = lbl[rd_row][rd_col] target_label.config(text=rd_num) root = Tk() root.geometry('+0+0') root.configure(bg='black') # 初始化二维字典,行从1到5,列从1到3 for y in range(1, 6): lbl[y] = {} # 列1对应原lbl1,grid列号0 lbl[y][1] = Label(root, width=5, relief='solid') lbl[y][1].grid(row=y, column=0) # 列2对应原lbl2,grid列号1 lbl[y][2] = Label(root, width=5, relief='solid') lbl[y][2].grid(row=y, column=1) # 列3对应原lbl3,grid列号2 lbl[y][3] = Label(root, width=5, relief='solid') lbl[y][3].grid(row=y, column=2) btn = Button(root, text='start', command=fill_auto) btn.grid(row=6, column=1) root.mainloop()
关键改动说明:
- 把原来分散的
lbl1、lbl2、lbl3三个字典合并成一个二维字典lbl,用行号(1-5)和列号(1-3)作为双层键,直接关联对应的Label对象,逻辑更清晰。 - 在
fill_auto里,不用再拼接字符串猜变量名,直接通过lbl[rd_row][rd_col]就能拿到随机选中的Label实例,调用config修改文本完全没问题。 - 特意把字典里的列号设为1-3,和你随机生成的
rd_col范围(1-3)对应,避免混淆grid的列索引(0-2)。
内容的提问来源于stack exchange,提问作者shkhoo
相关产品推荐
相关产品推荐

