Un gestor de inventario creado con GTK3 y SQLite.
Project description
📦 Gestor de Inventario
Un sistema de gestión de inventario de escritorio, limpio y eficiente, desarrollado en Python utilizando GTK3 para la interfaz gráfica y SQLite para el almacenamiento local de datos.
✨ Características
- Gestión de Productos (CRUD): Añade, edita, elimina y visualiza productos fácilmente.
- Gestión de Categorías: Organiza tu inventario creando categorías personalizadas.
- Base de datos local: Almacenamiento seguro en SQLite aislado en la carpeta de usuario (
~/.gestor_inventario/). - Interfaz moderna: Estilos personalizados mediante CSS (tematización completa de GtkTreeView, botones y formularios).
- Validación de datos: Formularios a prueba de errores.
📚 Documentación
Puedes consultar la documentación detallada de la API, clases y métodos, generada con Sphinx, en el siguiente enlace:
👉 gestor-inventario-samuel.readthedocs.io
🛠️ Requisitos Previos
- Python 3.8 o superior.
- Librerías de GTK3 instaladas en tu sistema:
- Linux: Instaladas por defecto en la mayoría de distribuciones (como Debian/Ubuntu).
- Windows: Requiere un entorno como MSYS2 o WSL.
🚀 Instalación
La aplicación está publicada, por lo que puedes instalarla fácilmente a través de pip:
pip install .
Uso
Una vez instalado, puedes ejecutar la aplicación con el comando:
xestor-inventario
🧪 Tests
Para ejecutar las pruebas unitarias de validación y conexión a base de datos:
python -m unittest discover tests/
📊 Arquitectura del Sistema
1. Diagrama de Clases
Este diagrama muestra cómo se relacionan las piezas principales del código, incluyendo la lógica de la aplicación, la interfaz y la persistencia.
classDiagram
class App {
+VentanaPrincipal ventanaPrincipal
+__init__()
+cargarEstilos()
}
class VentanaPrincipal {
+GtkTreeView vistaArbol
+__init__()
+cargarDatos()
+alHacerClicAnadir(widget)
+alHacerClicEditar(widget)
+alHacerClicEliminar(widget)
+alHacerClicCategorias(widget)
}
class DialogoFormulario {
+int identificadorProducto
+__init__(ventanaPadre, productoSeleccionado)
+cargarCategorias()
+obtenerDatos()
+validarDatos()
}
class VentanaCategorias {
+GtkTreeView vistaArbol
+__init__(ventanaPadre)
+cargarDatos()
+alHacerClicAnadir(widget)
}
class ConexionBD {
+String rutaBaseDatos
+Connection conexionActiva
+Cursor cursorActivo
+__init__(rutaBaseDatos)
+conectarBaseDatos()
+crearCursor()
+consultaSenParametros(sql)
+engadeRexistro(sql, args)
+actualizaRexistro(sql, args)
+eliminarRegistro(sql, args)
+cerrarBaseDatos()
}
%% Relaciones
App "1" *-- "1" VentanaPrincipal : Inicializa
VentanaPrincipal "1" ..> "*" DialogoFormulario : Abre
VentanaPrincipal "1" ..> "1" VentanaCategorias : Abre
VentanaPrincipal ..> ConexionBD : Usa
DialogoFormulario ..> ConexionBD : Usa
VentanaCategorias ..> ConexionBD : Usa
2. Diagrama de Secuencia
Proceso de añadir un nuevo producto al inventario:
sequenceDiagram
actor Usuario
participant VP as VentanaPrincipal
participant DF as DialogoFormulario
participant BD as ConexionBD
participant SQLite as Base de Datos Local
Usuario->>VP: Clic en botón "Añadir"
VP->>DF: __init__(parent=VP, producto=None)
activate DF
DF->>BD: conectarBaseDatos()
BD->>SQLite: SELECT * FROM categorias
SQLite-->>BD: Retorna categorías
BD-->>DF: Diccionario de categorías
DF-->>VP: Muestra ventana modal (Formulario)
Usuario->>DF: Rellena datos y clic en "Guardar"
DF->>DF: validarDatos()
alt Datos Inválidos
DF-->>Usuario: Muestra MensajeDialog (Error)
else Datos Válidos
DF->>DF: obtenerDatos()
DF->>BD: conectarBaseDatos()
DF->>BD: engadeRexistro(INSERT INTO productos...)
activate BD
BD->>SQLite: Ejecuta Query
SQLite-->>BD: OK
BD-->>DF: Operación exitosa
deactivate BD
DF-->>VP: Retorna ResponseType.OK
deactivate DF
VP->>BD: conectarBaseDatos()
VP->>BD: consultaSenParametros(SELECT * FROM productos...)
BD->>SQLite: Ejecuta Query
SQLite-->>BD: Retorna filas actualizadas
BD-->>VP: Datos de productos
VP->>VP: Actualiza GtkListStore (TreeView)
VP-->>Usuario: Muestra tabla actualizada
end
Desarrollado por: Samuel
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gestor_inventario_samuel-3.0.tar.gz.
File metadata
- Download URL: gestor_inventario_samuel-3.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c741d4a377a180511f3ff604f848a9be874f9ddf75786113aec8aa5601e3eaf
|
|
| MD5 |
fb61da206b075ef1246c5ebf0f41eaf6
|
|
| BLAKE2b-256 |
85d9772d24445f8adc24f251d077fa8f44d282fc9a6e9b48586447c197bad209
|
File details
Details for the file gestor_inventario_samuel-3.0-py3-none-any.whl.
File metadata
- Download URL: gestor_inventario_samuel-3.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39c76f5cee580f7b4414e52d8da8fc2bde5c7ffea0cf60dd9832c755d2b8b93f
|
|
| MD5 |
59c7ca3d217e533ba94eae8b7655a5d1
|
|
| BLAKE2b-256 |
11d1dbd57363468ca6ccda27a3e64cf577ff201dbc49e4e735fa4d9bee4cd602
|