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

Tkinter中如何保存通过按钮动态创建的Entry输入框的值?

解决Tkinter动态生成Entry并关联变量的问题

嘿,作为Tkinter新手,遇到这个问题太正常啦!你现在的代码能生成Entry,但没法关联变量、后续获取内容,核心问题是没有保存动态生成的Entry或其绑定变量的引用,导致之后没法访问它们。我给你整理了完整的解决方案:

核心思路

  1. 在类里初始化一个列表,用来存储每个动态生成的Entry对应的StringVar(或者直接存Entry对象),这样就能随时访问这些输入框的内容。
  2. 创建Entry时,把它和StringVar绑定,再把变量(或Entry)加入列表。
  3. 可以加一个测试按钮,用来验证能不能获取所有输入框的内容。

完整示例代码

import tkinter as tk
from tkinter import Toplevel, Button, Entry, StringVar

class App:
    def __init__(self, root):
        self.root = root
        root.title("Dynamic Entry Demo")
        
        # 初始化列表,用来存储每个Entry对应的StringVar
        self.entry_vars = []
        
        # 初始按钮:打开新建分类窗口
        new_cat_btn = Button(root, text="New Category", command=self.new_category)
        new_cat_btn.pack(pady=10)

    def new_category(self):
        new_window = Toplevel(self.root)
        new_window.title("New System")
        
        # 按钮:生成新的Entry输入框
        add_ability_btn = Button(new_window, text="Add Ability", command=lambda: self.new_entry(new_window))
        add_ability_btn.pack(pady=5)
        
        # 按钮:获取所有输入框的内容(测试用)
        get_contents_btn = Button(new_window, text="Get All Inputs", command=self.get_all_contents)
        get_contents_btn.pack(pady=5)

    def new_entry(self, window):
        # 创建StringVar,用于绑定Entry的内容
        input_var = StringVar()
        # 创建Entry并绑定变量
        input_entry = Entry(window, textvariable=input_var)
        input_entry.pack(pady=2)
        # 将变量加入列表,保存引用
        self.entry_vars.append(input_var)

    def get_all_contents(self):
        # 遍历列表,获取每个输入框的内容
        all_inputs = [var.get() for var in self.entry_vars]
        print("所有输入内容:", all_inputs)
        # 这里可以把内容保存到文件、数据库或者其他变量里

if __name__ == "__main__":
    root = tk.Tk()
    app = App(root)
    root.mainloop()

可选方案:直接存储Entry对象

如果你更习惯直接操作Entry组件,也可以把Entry对象存入列表,修改如下:

  • 在__init__里初始化self.entries = []
  • 修改new_entry方法:
    def new_entry(self, window):
        input_entry = Entry(window)
        input_entry.pack(pady=2)
        self.entries.append(input_entry)
    
  • 修改get_all_contents方法:
    def get_all_contents(self):
        all_inputs = [entry.get() for entry in self.entries]
        print("所有输入内容:", all_inputs)
    

关键说明

不管用哪种方式,必须保存动态生成组件/变量的引用,不然Python的垃圾回收机制会把它们清理掉,之后就没法获取内容了。用列表管理这些引用,后续批量处理(比如保存到文件、验证输入)也会非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:59:16