You need to enable JavaScript to run this app. Python Tkinter中使用get()获取Entry输入值的简便实现方法
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter中使用get()获取Entry输入值的简便实现方法

最简优化方案

完全不需要额外维护全局的结果列表entriesList2,直接用Python列表推导式就能在按钮触发时,一行完成所有Entry控件的输入值批量读取:

def appendToDict():
    # 点击按钮时临时生成输入值列表,函数执行完成后自动回收内存,无长期存储开销
    all_inputs = [entry.get() for entry in entriesList]
    print(all_inputs)

只需要删掉原本的entriesList2 = []全局定义,替换掉原来的循环append逻辑即可,没有任何冗余步骤。

为什么你之前的写法不生效

你尝试在循环里写i = i.get()没效果,和Tkinter本身无关,是Python的for循环运行机制决定的:

  • for循环遍历列表时,临时变量i只是当前拿到的Entry对象的临时引用
  • 在循环体内给i重新赋值,只会覆盖这个临时变量本身的值,既不会修改原列表里存的控件实例,也不会把get()的结果同步回原列表,自然达不到你想要的“批量替换成输入值”的效果。
原有代码的隐藏问题

你之前用全局entriesList2存结果的写法,其实存在逻辑bug:

  • 这个全局列表不会在每次触发按钮时清空,每点一次按钮就会把当前的输入值全部追加到列表尾部
  • 多次点击后,列表会不断累积历史输入值,长度翻倍增长,根本不是你想要的“读取当前所有输入”的效果,还会无意义占内存。
进阶优化(适配你的业务结构)

从代码逻辑看,你的界面是“列对应车品牌、行对应车辆属性”的表格,后续本来就要把输入值整理成字典结构的话,可以把Entry控件按属性维度做结构化存储,省掉后续手动对应位置的步骤:

  1. 把原本的一维entriesList替换成字典,以属性名(Country/Modell/...)为key,对应行的所有Entry列表为value
  2. 取值时直接按属性维度批量读取,直接生成结构化的结果,不需要二次整理位置
# 替换原有全局列表定义
entries_map = {}

for attr_idx, attr_name in enumerate(Attributes):
    row_entries = []
    for car_idx, car_name in enumerate(Car):
        myEntry = Entry(root)
        myEntry.grid(row=attr_idx+1, column=car_idx+1)
        row_entries.append(myEntry)
    entries_map[attr_name] = row_entries

# 替换原有回调函数
def appendToDict():
    result = {
        attr_name: [entry.get() for entry in row_entries]
        for attr_name, row_entries in entries_map.items()
    }
    print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.30 07:36:01