如何在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
相关产品推荐
相关产品推荐

