Python Tkinter:不依赖条目标签名或get()方法如何获取输入值?
解决Tkinter Entry矩阵数据提取问题
问题分析
原代码存在几个核心问题导致无法提取Entry矩阵数据:
- 未将创建的Entry对象存储到
matrix列表中,仅用单个变量matrixInput覆盖,最终只能访问最后一个Entry input是number函数的局部变量,storeMatrix函数无法直接访问storeMatrix未按矩阵结构组织数据,且错误使用了仅指向最后一个Entry的变量
修正后的代码
from tkinter import * # 初始化空矩阵,用于存储Entry对象 matrix = [] def number(): try: # 获取用户输入并转为整数 size = int(E1.get()) # 清空之前的矩阵(如果有) global matrix matrix = [] # 创建Entry矩阵并存储到matrix中 for x in range(size): row = [] for y in range(size): entry = Entry(root, bg="white") entry.grid(row=10+x, column=1+y, padx=5, pady=5) row.append(entry) matrix.append(row) # 创建提交按钮 B2 = Button(root, text="Submit", font=40, command=storeMatrix) B2.grid(row=20, column=1) L2.config(text="") # 清空错误提示 except ValueError: L2.config(text="请输入有效数字") def storeMatrix(): # 提取矩阵中所有Entry的输入值 result_matrix = [] for row in matrix: current_row = [] for entry in row: current_row.append(entry.get()) result_matrix.append(current_row) # 这里可以添加处理结果的逻辑,比如打印或展示 print("提取到的矩阵数据:") for row in result_matrix: print(row) root = Tk() L1 = Label(root, text="输入人数", font=40) L1.grid(row=0, column=0) E1 = Entry(root, bg="white") E1.grid(row=0, column=1) L2 = Label(root, text='') L2.grid(row=3, column=1) B1 = Button(root, text="生成矩阵", font=40, command=number) B1.grid(row=2, column=1) root.mainloop()
关键改动说明
- 将
matrix设为全局变量,在number函数中重新初始化并逐行存储Entry对象,确保每个输入框都被记录 - 把原
input变量重命名为size,避免与Python内置函数冲突,同时通过遍历matrix的方式获取矩阵结构,无需额外传递尺寸参数 storeMatrix函数通过遍历matrix中的每个Entry对象调用get()方法,正确提取所有输入值并按二维矩阵结构组织- 优化错误提示逻辑,正确输入时清空之前的错误提示
输入界面示意图:
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

