如何用Python Tkinter获取所有输入框内容并存入列表?
问题与解决方案
我的目标是点击Solve按钮时,将所有输入框的内容生成一个列表。我尝试获取用户输入,但使用focus_set()时每次只能聚焦一个输入框。请问是否可以聚焦所有输入框?如果不行,如何在点击一次按钮时逐个获取每个输入框的内容并存入列表?
核心结论
无法同时聚焦多个输入框,GUI框架(包括tkinter)同一时间仅允许单个控件获得输入焦点,focus_set()每次只能作用于一个输入框,这是正常的设计逻辑。
解决方案:保存输入框引用并批量获取内容
要实现点击按钮一次性收集所有输入框内容,只需在创建输入框时保存每个输入框的对象引用,点击按钮时遍历这些引用逐个获取内容即可。
修改后的完整代码:
import tkinter as tk # 创建窗口 root = tk.Tk() root.geometry("780x400") # 创建框架 frame = tk.Frame(root) # 配置列权重 frame.columnconfigure(0, weight=4) for i in range(9): frame.columnconfigure(i+1, weight=1) frame.columnconfigure(10, weight=4) # 创建标题 title = tk.Label(root, text="Sudoku Solver", height=3, font=("Arial",14)) title.pack() # 创建输入框的函数 def createBox(rowID, columnID, Xpad1, Xpad2, Ypad1, Ypad2): box1 = tk.Entry(frame, width=2) box1.grid(row=rowID, column=columnID, padx=(Xpad1,Xpad2), pady=(Ypad1,Ypad2)) return box1 # 存储所有输入框的列表 entries = [] # 点击按钮时执行的函数 def enter(): # 遍历所有输入框,收集内容到列表(strip()去除多余空格) sudoku_values = [entry.get().strip() for entry in entries] # 可在此添加后续处理逻辑,比如打印或传入数独求解算法 print(sudoku_values) # 循环创建81个输入框 Xpad1 = 0 Xpad2 = 0 Ypad1 = 0 Ypad2 = 0 for i in range(9): for j in range(9): # 设置网格间隔,模拟数独区块分隔 if i == 3: Xpad1 = 5 elif i == 5: Xpad2 = 5 if j == 3: Ypad1 = 5 elif j == 5: Ypad2 = 5 # 创建输入框并添加到列表 entry = createBox(j, i, Xpad1, Xpad2, Ypad1, Ypad2) entries.append(entry) # 重置间隔参数 Xpad1 = 0 Xpad2 = 0 Ypad1 = 0 Ypad2 = 0 # 创建求解按钮 solveButton = tk.Button(root, text="Solve", command=enter) solveButton.pack() # 打包框架 frame.pack() root.mainloop()
关键修改说明
- 新增
entries列表:替代原代码中单个Test变量,统一存储所有输入框对象的引用 - 重构
enter函数:通过列表推导式遍历entries,批量获取每个输入框的内容 - 移除无用的
focus_set():该操作对批量获取内容无帮助,且无法实现多控件聚焦
内容的提问来源于stack exchange,提问作者user22780297
相关产品推荐
相关产品推荐

