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

如何获取for循环动态创建的所有Tkinter Entry组件的输入值?

问题核心原因

循环创建Entry组件时,每次迭代都会覆盖myinput变量的引用,最终该变量只会保留最后一个Entry实例,因此无法获取之前创建的组件值。

解决方案

用列表/字典存储所有创建的Entry实例即可,以下是适配Frame、支持多次调用的实现:

基础实现

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
# 承载输入项的目标Frame
input_frame = ttk.Frame(root, padding=10)
input_frame.pack()

EntryList = ["Enter value 1", "Enter value 2", "Enter value 3", "Enter value 4"]
# 用于存储所有Entry实例的列表
entry_widgets = []

# 推荐用enumerate获取索引,避免列表有重复元素时index()返回错误行号
for idx, label_text in enumerate(EntryList):
    ttk.Label(input_frame, text=label_text).grid(row=idx, column=0, padx=5, pady=2)
    myinput = ttk.Entry(input_frame)
    myinput.grid(row=idx, column=1, padx=5, pady=2)
    # 把当前Entry实例存入列表保留引用
    entry_widgets.append(myinput)

获取所有输入值的方法:

def get_all_inputs():
    # 遍历存储Entry的列表逐个取值
    input_values = [entry.get() for entry in entry_widgets]
    print(input_values)
    return input_values

# 测试按钮
ttk.Button(input_frame, text="获取所有输入", command=get_all_inputs).grid(row=len(EntryList), column=0, columnspan=2, pady=10)

root.mainloop()

支持多次调用的封装

如果多个按钮需要触发不同的输入项生成逻辑,把生成逻辑封装为函数,每次调用返回对应组的Entry实例列表即可,互不干扰:

def create_input_group(parent_frame, label_list):
    """
    生成一组输入项
    :param parent_frame: 承载输入项的父Frame
    :param label_list: 输入项提示文本列表
    :return: 存储当前组所有Entry的列表
    """
    # 清空Frame原有组件(不需要覆盖旧内容可删除这两行)
    for widget in parent_frame.winfo_children():
        widget.destroy()
    
    current_entries = []
    for idx, text in enumerate(label_list):
        ttk.Label(parent_frame, text=text).grid(row=idx, column=0, padx=5, pady=2)
        entry = ttk.Entry(parent_frame)
        entry.grid(row=idx, column=1, padx=5, pady=2)
        current_entries.append(entry)
    return current_entries

# 不同按钮调用示例
# 按钮1触发生成第一组输入
entry_group1 = create_input_group(input_frame, ["参数1", "参数2", "参数3"])
# 按钮2触发生成第二组输入
entry_group2 = create_input_group(input_frame, ["配置A", "配置B", "配置C", "配置D"])

# 各自取值只需要遍历对应的列表即可
values1 = [e.get() for e in entry_group1]
values2 = [e.get() for e in entry_group2]

关于回车分步加载方案的说明

该方案逻辑上可行,但会额外增加交互流程和代码复杂度,除非有特殊的交互需求,否则优先使用上述存储Entry实例的方案即可满足需求。


内容的提问来源于stack exchange,提问作者Karan Hathwar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:09:01