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

如何在Tkinter的Entry网格中用列表设置textvariable以读写数据

解决Tkinter Entry网格的数据获取与设置问题

你的代码报错核心原因有两个:

  • uservalue是空的,且Python原生列表不支持list[i,j]的二维索引方式
  • 没有为每个Entry创建对应的StringVar实例来绑定输入值

要实现用uservalue[i,j]形式操作Entry数据,你可以用字典模拟二维索引(键为元组(i,j)),配合StringVar完成绑定,以下是修正后的完整代码:

from tkinter import *

def print_value(entry, i, j):
    # 获取选中Entry的当前值并打印
    print(entry.get())
    # 通过uservalue[i,j]设置该Entry的内容
    uservalue[i,j].set('testing')

root = Tk()
# 用字典存储每个Entry对应的StringVar,键为(i,j)元组
uservalue = {}

height = 5
width = 1
for i in range(height):  # 行循环
    for j in range(width):  # 列循环
        # 为每个(i,j)创建StringVar并存入字典
        uservalue[(i,j)] = StringVar()
        # 绑定StringVar到Entry的textvariable
        entry = Entry(root, textvariable=uservalue[i,j], width=100)
        entry.grid(row=i, column=j)
        # 把entry、i、j传入lambda,确保点击按钮时能获取对应坐标
        b = Button(root, text="print value", command=lambda entry=entry, i=i, j=j: print_value(entry, i, j), width=10)
        b.grid(row=i, column=j+1)

mainloop()

关键说明:

  • 字典模拟二维索引:Python列表仅支持list[i][j]的二维访问,用字典以(i,j)为键,就能实现uservalue[i,j]的调用形式
  • StringVar绑定:每个Entry的textvariable必须绑定一个StringVar实例,这样才能通过set()和get()方法直接操作输入框内容
  • lambda参数捕获:循环中传递i=i和j=j给lambda,是为了避免循环变量被覆盖,确保按钮点击时能获取当前Entry对应的坐标

内容的提问来源于stack exchange,提问作者abdullah qureshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:15