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

如何在Tkinter中点击按钮获取多个Entry输入?

问题解决:多个Entry输入重复、无法获取全部内容的问题

你的问题核心在于所有Entry都绑定了同一个StringVar对象——Tkinter里,同一个StringVar绑定多个输入框时,它们会共享数据,输入框内容会同步,而且你只能拿到这个变量的单一值,自然无法获取每个输入框的独立内容。

解决步骤:

  1. 给每个Entry分配独立的存储方式:要么为每个Entry创建单独的StringVar,要么直接保存Entry对象,后续用entry.get()获取输入内容(后者更简洁)。
  2. 收集所有输入内容后,生成XML文件并保存。

修改后的代码示例:

import tkinter as tk
import xml.etree.ElementTree as ET
from xml.dom import minidom

# 主窗口设置
root = tk.Tk()
root.geometry('900x500')
root.title('Box Designer')

# 顶部标题
label = tk.Label(root, text='请输入参数', font=('Arial', 18))
label.pack(padx=20, pady=20)

# 存储所有Entry对象的列表
entry_list = []

# 创建12个输入框
entryframe = tk.Frame(root)
# 配置列,让输入框自适应宽度
for col in range(6):
    entryframe.columnconfigure(col, weight=1)

for i in range(12):
    row = i // 2
    col_label = (i % 2) * 2
    col_entry = col_label + 1
    
    # 创建标签和输入框
    entry_label = tk.Label(entryframe, text=f'X{i+1}:')
    entry_label.grid(row=row, column=col_label, sticky=tk.W+tk.E, padx=5, pady=5)
    
    entry = tk.Entry(entryframe)
    entry.grid(row=row, column=col_entry, sticky=tk.W+tk.E, padx=5, pady=5)
    entry_list.append(entry)

# 回调函数:获取所有输入并保存为XML
def save_to_xml():
    # 获取所有输入内容
    params = [entry.get().strip() for entry in entry_list]
    
    # 创建XML结构
    root_xml = ET.Element("BoxParameters")
    for idx, val in enumerate(params, start=1):
        param = ET.SubElement(root_xml, f"X{idx}")
        param.text = val
    
    # 格式化XML,让输出更美观
    rough_string = ET.tostring(root_xml, 'utf-8')
    reparsed = minidom.parseString(rough_string)
    pretty_xml = reparsed.toprettyxml(indent="  ")
    
    # 保存到文件
    with open("box_params.xml", "w", encoding="utf-8") as f:
        f.write(pretty_xml)
    
    print("XML文件已保存!")

# 提交按钮
button_border = tk.Frame(root, highlightbackground="black", highlightthickness=2, bd=0)
donebtn = tk.Button(button_border, text='提交', fg='black', font=('Arial',15), default="active", command=save_to_xml)
root.bind('<Return>', lambda e: donebtn.invoke())

# 布局
entryframe.pack(side='bottom', fill='x', padx=20, pady=60)
donebtn.pack(padx=10, pady=5)
button_border.pack()

root.mainloop()

代码说明:

  • 用entry_list存储所有Entry对象,避免重复创建多个StringVar,直接通过entry.get()获取每个输入框的内容。
  • 生成XML时,先构建ElementTree结构,再用minidom格式化输出,让XML更易读。
  • 按下回车键或点击按钮,都会触发保存操作,生成名为box_params.xml的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:50:28