#!/usr/bin/env python3 from nicegui import events, ui columns = [ {'name': 'name', 'label': 'Name', 'field': 'name', 'align': 'left'}, {'name': 'age', 'label': 'Age', 'field': 'age'}, ] rows = [ {'id': 0, 'name': 'Alice', 'age': 18}, {'id': 1, 'name': 'Bob', 'age': 21}, {'id': 2, 'name': 'Carol', 'age': 20}, ] def add_row() -> None: new_id = max((dx['id'] for dx in rows), default=-1) + 1 rows.append({'id': new_id, 'name': 'New guy', 'age': 21}) ui.notify(f'Added new row with ID {new_id}') table.update() def rename(e: events.GenericEventArguments) -> None: for row in rows: if row['id'] == e.args['id']: row.update(e.args) ui.notify(f'Updated rows to: {table.rows}') table.update() def delete(e: events.GenericEventArguments) -> None: rows[:] = [row for row in rows if row['id'] != e.args['id']] ui.notify(f'Deleted row with ID {e.args["id"]}') table.update() table = ui.table(columns=columns, rows=rows, row_key='name').classes('w-60') table.add_slot('header', r''' {{ col.label }} ''') table.add_slot('body', r''' {{ props.row.name }} {{ props.row.age }} ''') with table.add_slot('bottom-row'): with table.cell().props('colspan=3'): ui.button('Add row', icon='add', color='accent', on_click=add_row).classes('w-full') table.on('rename', rename) table.on('delete', delete) ui.run()