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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:27:24