12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/usr/bin/env python3
- import sqlite3
- from pathlib import Path
- from typing import Any, Dict
- from nicegui import ui
- DB_FILE = Path(__file__).parent / 'users.db'
- DB_FILE.touch()
- conn = sqlite3.connect(DB_FILE, check_same_thread=False)
- cursor = conn.cursor()
- cursor.execute('CREATE TABLE IF NOT EXISTS users (id integer primary key AUTOINCREMENT, name text, age integer)')
- conn.commit()
- @ui.refreshable
- def users_ui() -> None:
- cursor.execute('SELECT * FROM users')
- for row in cursor.fetchall():
- user = {'id': row[0], 'name': row[1], 'age': row[2]}
- with ui.card():
- with ui.row().classes('justify-between w-full'):
- ui.label(user['id'])
- ui.label(user['name'])
- ui.label(user['age'])
- with ui.row():
- ui.button('edit', on_click=lambda user=user: open_dialog(user))
- ui.button('delete', on_click=lambda user=user: delete(user), color='red')
- def create() -> None:
- cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', (name.value, age.value))
- conn.commit()
- ui.notify(f'Created new user {name.value}')
- name.value = ''
- age.value = None
- users_ui.refresh()
- def update() -> None:
- query = 'UPDATE users SET name=?, age=? WHERE id=?'
- cursor.execute(query, (dialog_name.value, dialog_age.value, dialog_id))
- conn.commit()
- ui.notify(f'Updated user {dialog_name.value}')
- dialog.close()
- users_ui.refresh()
- def delete(user: Dict[str, Any]) -> None:
- cursor.execute('DELETE from users WHERE id=?', (user['id'],))
- conn.commit()
- ui.notify(f'Deleted user {user["name"]}')
- users_ui.refresh()
- def open_dialog(user: Dict[str, Any]) -> None:
- global dialog_id
- dialog_id = user['id']
- dialog_name.value = user['name']
- dialog_age.value = user['age']
- dialog.open()
- name = ui.input(label='Name')
- age = ui.number(label='Age', format='%.0f')
- ui.button('Add new user', on_click=create)
- users_ui()
- with ui.dialog() as dialog:
- with ui.card():
- dialog_id = None
- dialog_name = ui.input('Name')
- dialog_age = ui.number('Age', format='%.0f')
- with ui.row():
- ui.button('Save', on_click=update)
- ui.button('Close', on_click=dialog.close).props('outline')
- ui.run()
|