如何在Python Flet的DataTable中追加记录并通过列表访问?
实现DataTable记录追加功能
要解决点击按钮后追加记录到DataTable、而非重复创建表格的需求,同时保留可直接访问的记录列表,可按以下方式修改代码:
修改思路
- 初始化一个列表存储所有记录,方便后续业务逻辑调用
- 预先创建DataTable组件并保存引用,避免每次点击都生成新表格
- 在点击事件中,将输入内容转为DataRow并追加到现有DataTable的行集合中
完整修改代码
import flet as ft def main(page: ft.Page): # 用于存储所有记录的列表,可随时访问 records = [] # 预先定义DataTable组件 data_table = ft.DataTable( columns=[ ft.DataColumn(ft.Text("First name")), ft.DataColumn(ft.Text("Last name")), ft.DataColumn(ft.Text("Age")), ], rows=[] # 初始为空行 ) def add_clicked(e): # 获取输入框的值 first_name = new_task.value.strip() last_name = new_task1.value.strip() age = new_task2.value.strip() # 简单校验非空(可选) if not (first_name and last_name and age): return # 创建新的数据行 new_row = ft.DataRow( cells=[ ft.DataCell(ft.Text(first_name)), ft.DataCell(ft.Text(last_name)), ft.DataCell(ft.Text(age)), ] ) # 追加到DataTable的行集合 data_table.rows.append(new_row) # 同时把数据存入记录列表,方便后续访问 records.append({ "first_name": first_name, "last_name": last_name, "age": age }) # 清空输入框 new_task.value = "" new_task1.value = "" new_task2.value = "" # 更新页面 page.update() # 输入框定义 new_task = ft.TextField(hint_text="输入名字") new_task1 = ft.TextField(hint_text="输入姓氏") new_task2 = ft.TextField(hint_text="输入年龄") # 将所有组件添加到页面(包括预先创建的DataTable) page.add(new_task, new_task1, new_task2, ft.FloatingActionButton(icon=ft.icons.ADD, on_click=add_clicked), data_table) ft.app(target=main)
关键说明
records列表:可在代码任意位置直接访问该列表,获取所有已添加的结构化记录数据- 复用DataTable组件:提前创建并挂载到页面,后续仅通过
data_table.rows.append()追加新行,避免重复生成表格 - 页面更新:每次追加行后调用
page.update()刷新界面,确保新记录即时显示
内容的提问来源于stack exchange,提问作者Navrang
相关产品推荐
相关产品推荐

