Python Flet中DataTable删除数据报错TypeError问题求助
解决Flet DataTable删除数据时的TypeError问题
使用Flet框架开发CRUD应用,数据新增功能运行正常,但点击IconButton删除DataTable中的数据时,触发错误提示:
TypeError: list indices must be integers or slices, not str
错误原因
原eliminar函数存在两处核心问题:
- 错误尝试移除整个
rows列表而非目标数据行:tablaproducto.rows.remove(tablaproducto.rows) - 未关联点击按钮对应的具体数据行,无法定位要删除的记录
修正方案
- 在新增数据时,给删除按钮的
data属性绑定当前创建的DataRow,让点击事件直接获取目标行 - 修改
eliminar函数,通过事件对象取出绑定的DataRow,再从表格的rows列表中移除
完整修正代码
import flet as ft from flet import * def main(page: ft.Page): codpro = TextField(label="CÓDIGO PRODUCTO") nompro = TextField(label="NOMBRE PRODUCTO") # 品类下拉框 ddcate = ft.Dropdown( label="CATEGORIA", width=150, options=[ ft.dropdown.Option("dulce"), ft.dropdown.Option("salado"), ], ) # 重量单位下拉框 ddpeso = ft.Dropdown( label="PESO", width=100, options=[ ft.dropdown.Option("KG"), ft.dropdown.Option("G"), ], ) tablaproducto = DataTable( # 列标题 columns=[ DataColumn(Text("CÓDIGO")), DataColumn(Text("PRODUCTO")), DataColumn(Text("CATEGORÍA")), DataColumn(Text("PESO")), DataColumn(Text("ACCIONES")), ], # 数据行 rows=[] ) # 删除函数 def eliminar(e): # 从事件对象中获取绑定的DataRow row_to_delete = e.control.data tablaproducto.rows.remove(row_to_delete) # 底部提示条 page.snack_bar = SnackBar( Text("SE ELIMINO DATO", size=30), bgcolor="red" ) page.snack_bar.open = True page.update() # 新增函数 def agregar(e): # 创建当前数据行 new_row = DataRow( cells=[ DataCell(Text(codpro.value)), DataCell(Text(nompro.value)), DataCell(Text(ddcate.value)), DataCell(Text(ddpeso.value)), DataCell( Row([ IconButton( "delete", icon_color="red", on_click=eliminar, data=new_row # 绑定当前行到按钮的data属性 ), ]) ), ] ) tablaproducto.rows.append(new_row) # 底部提示条 page.snack_bar = SnackBar( Text("DATO INGRESADO CORRECTAMENTE", size=30), bgcolor="green" ) page.snack_bar.open = True page.update() # 新增按钮 BtnAgregar = ElevatedButton( text="Agregar", bgcolor="blue", color="white", on_click=agregar ) page.add( Column([ Text("PRODUCTOS", size=30, weight="bold"), codpro, nompro, ddcate, ddpeso, Row([BtnAgregar]), tablaproducto ]) ) ft.app(target=main)
内容的提问来源于stack exchange,提问作者Andres Vilca
相关产品推荐
相关产品推荐

