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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:42:40