如何在Tkinter中点击按钮获取多个Entry输入?
问题解决:多个Entry输入重复、无法获取全部内容的问题
你的问题核心在于所有Entry都绑定了同一个StringVar对象——Tkinter里,同一个StringVar绑定多个输入框时,它们会共享数据,输入框内容会同步,而且你只能拿到这个变量的单一值,自然无法获取每个输入框的独立内容。
解决步骤:
- 给每个Entry分配独立的存储方式:要么为每个Entry创建单独的
StringVar,要么直接保存Entry对象,后续用entry.get()获取输入内容(后者更简洁)。 - 收集所有输入内容后,生成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
相关产品推荐
相关产品推荐

