如何将变量值传递到Tkinter Grid的指定单元格?
解决Tkinter Grid布局中指定单元格赋值的问题
首先纠正你代码里的几个问题:
bind语句放在callback函数内部会导致每次触发回调时重复绑定事件,应该移到函数外面。- Tkinter的
Entry组件不支持text参数设置内容,要初始化内容得用insert方法,或者通过textvariable绑定变量。 - 你没有保存每个
Entry的实例引用,所以没法直接通过行列位置访问组件。
正确的实现方式
最直接的方法是用二维列表存储所有Entry实例,这样就能通过行列索引快速定位到指定单元格:
from tkinter import * root = Tk() # 创建二维列表存储所有Entry组件 grid_entries = [] def callback(*args): print("testing data hi") # 注意:Tkinter的grid行/列索引从0开始,这里(1,1)对应第二行第二列的单元格 grid_entries[1][1].delete(0, END) # 先清空原有内容 grid_entries[1][1].insert(0, "the new text in specific cell ") # 绑定F2事件,放在函数外面避免重复绑定 root.bind("<F2>", callback) b = 0 for r in range(5): # 每行创建一个子列表 row_entries = [] for c in range(5): b += 1 entry = Entry(root, borderwidth=1) entry.grid(row=r, column=c) entry.insert(0, str(b)) # 初始化内容 row_entries.append(entry) grid_entries.append(row_entries) root.mainloop()
关键说明
- 初始化时,把每个创建的
Entry对象加入二维列表grid_entries,grid_entries[r][c]就对应第r行第c列的单元格(r和c从0开始计数)。 - 要修改内容时,先用
delete(0, END)清空原有内容,再用insert(0, 新内容)插入新文本;如果用textvariable绑定StringVar,也可以直接修改变量的值:var = StringVar(value=str(b)) entry = Entry(root, textvariable=var, borderwidth=1) # 修改时直接赋值 grid_entries[1][1].set("新内容") - 你之前尝试的
entry(1,1).set_value、grid(1,1).set_value这类写法都是错误的,Tkinter没有这类API,必须通过保存的组件实例来调用方法。
内容的提问来源于stack exchange,提问作者abdullah qureshi
相关产品推荐
相关产品推荐

