如何在Python Tkinter中实现自定义行列的动态数据输入表格?
动态生成Tkinter数据输入表格的实现方案
你可以通过循环创建tk.Entry组件并使用grid布局来实现动态表格,同时需要保存所有输入框的引用,方便后续提取用户输入的数据。以下是修改后的完整代码:
import tkinter as tk from tkinter import ttk, simpledialog class DatasetCreator: def __init__(self, master): self.master = master self.create_button_frame() def create_button_frame(self): button_frame = ttk.Frame(self.master, padding=(10, 10, 10, 10)) button_frame.grid(row=0, column=0, padx=10, pady=10) self.create_button(button_frame, "Create Dataset", self.create_dataset_window) def create_button(self, frame, text, command): button = tk.Button(frame, text=text, command=command) button.pack() def create_dataset_window(self): config_window = tk.Toplevel(self.master) config_window.title("Dataset Configuration") # 获取行列数,处理用户取消输入的情况 num_rows = simpledialog.askinteger("Dataset Configuration", "Enter the number of rows:") if num_rows is None: config_window.destroy() return num_columns = simpledialog.askinteger("Dataset Configuration", "Enter the number of columns:") if num_columns is None: config_window.destroy() return # 创建表格容器,方便统一布局 table_frame = ttk.Frame(config_window, padding=(10,10)) table_frame.pack(padx=10, pady=10) # 存储所有输入框的二维列表,用于后续获取数据 self.entry_grid = [] # 循环生成行和列的输入框 for row in range(num_rows): current_row = [] for col in range(num_columns): entry = tk.Entry(table_frame, width=15) entry.grid(row=row, column=col, padx=2, pady=2) current_row.append(entry) self.entry_grid.append(current_row) # 添加按钮用于提取数据(示例功能) extract_btn = tk.Button(config_window, text="Extract Data", command=self.extract_dataset) extract_btn.pack(pady=10) def extract_dataset(self): # 遍历输入框网格,提取所有数据 dataset = [] for row_entries in self.entry_grid: row_data = [entry.get().strip() for entry in row_entries] dataset.append(row_data) # 这里可以替换为你需要的处理逻辑,比如保存到文件或进一步处理 print("用户输入的数据集:") for row in dataset: print(row) if __name__ == "__main__": root = tk.Tk() root.title("Dataset Creator") app = DatasetCreator(root) root.mainloop()
关键说明:
- 处理用户取消输入:
simpledialog.askinteger在用户点击取消时会返回None,需要判断并关闭窗口,避免后续报错。 - 表格容器:用
ttk.Frame包裹所有输入框,让布局更整洁,也方便后续调整样式。 - 存储输入框引用:用二维列表
self.entry_grid保存每个Entry组件,这样在需要提取数据时可以轻松遍历所有单元格。 - 数据提取示例:
extract_dataset方法展示了如何获取所有输入框的内容,你可以根据需求修改为保存到CSV、数据库等逻辑。
内容的提问来源于stack exchange,提问作者bouteffah touiki anas
相关产品推荐
相关产品推荐

