如何更新NiceGUI表格?点击按钮读Excel后无法更新原有表格
解决NiceGUI表格更新问题
你代码里的核心问题是:ui.table.from_pandas()是类方法,专门用来创建新的Table组件实例,而不是更新已有的表格。所以你在按钮事件里调用它,只会生成新表格,不会修改原来的mytable。
要实现原有表格的更新,需要直接修改已有Table实例的columns和rows属性,然后触发组件更新。修改后的代码如下:
from nicegui import ui import pandas as pd def compare(): ui.notify("reading......") # 读取Excel文件 df = pd.read_excel("1.xlsx") # 将DataFrame转换为表格需要的columns和rows格式 columns = [{'name': col, 'label': col, 'field': col} for col in df.columns] rows = df.to_dict('records') # 更新已有表格的属性 mytable.columns = columns mytable.rows = rows # 触发组件更新 ui.update(mytable) ui.notify("complete......") with ui.row(): compare_btn = ui.button(text="test", on_click=compare) # 初始化空表格 mytable = ui.table(columns=[], rows=[]).style("width:100%;height:100%;") ui.run()
关键说明:
- 初始化表格时,直接创建空的
ui.table实例,而不是用from_pandas(因为此时df是空的,没必要用类方法) - 读取Excel后,把DataFrame的列转换成表格要求的
columns格式(每个列需要name、label、field三个字段) - 把DataFrame的行转换成字典列表格式(用
df.to_dict('records')) - 直接给mytable的
columns和rows赋值,再调用ui.update(mytable)刷新组件
这样就能实现点击按钮后,在原有表格上更新内容,而不会创建新表格。
内容的提问来源于stack exchange,提问作者Syni
相关产品推荐
相关产品推荐

