203 lines
7.1 KiB
Markdown
203 lines
7.1 KiB
Markdown
# MultiApp
|
|
|
|
MultiApp es una aplicación de escritorio desarrollada en Python que combina múltiples funcionalidades en una sola interfaz gráfica. Utiliza la biblioteca `customtkinter` para la creación de la interfaz de usuario y está diseñada para ser modular, integrando diferentes servicios y herramientas como un monitor del sistema, un juego de Tetris, un gestor de procesos, y un scrapper web.
|
|
|
|
## Características principales
|
|
|
|
- **Interfaz gráfica moderna**: Construida con `customtkinter` para una experiencia de usuario mejorada.
|
|
- **Scrapping web**: Permite extraer enlaces de páginas web y almacenarlos en una base de datos.
|
|
- **Monitor del sistema**: Muestra métricas en tiempo real como uso de CPU, RAM y red.
|
|
- **Juego de Tetris**: Incluye un juego de Tetris completamente funcional.
|
|
- **Reproductor de Radio**: Permite reproducir emisoras de radio.
|
|
- **Gestión de procesos**: Abre programas, archivos o URLs directamente desde la aplicación.
|
|
- **Gestión de hilos**: Maneja múltiples tareas concurrentes de manera eficiente.
|
|
|
|
---
|
|
|
|
## Estructura del proyecto
|
|
|
|
El proyecto está organizado en diferentes módulos y clases, cada uno con una responsabilidad específica. A continuación, se describen las clases principales y sus funcionalidades.
|
|
|
|
### 1. `CenteredWindow` (ubicada en `src/ui/centered_window.py`)
|
|
|
|
Esta es la clase principal de la aplicación que gestiona la interfaz gráfica y la interacción del usuario.
|
|
|
|
- **Responsabilidades**:
|
|
- Configurar la ventana principal y centrarla en la pantalla.
|
|
- Crear paneles (izquierdo, derecho, central y barra inferior) para organizar las funcionalidades.
|
|
- Manejar el inicio y cierre de la aplicación.
|
|
- Integrar los diferentes componentes como el monitor del sistema, el scrapper y el juego de Tetris.
|
|
|
|
---
|
|
|
|
### 2. `ThreadsManager` (ubicada en `src/services/threads_manager.py`)
|
|
|
|
Gestiona los hilos de ejecución para las diferentes tareas de la aplicación.
|
|
|
|
- **Responsabilidades**:
|
|
- Iniciar y detener hilos para tareas como actualización de tiempo, temperatura, correos, monitor del sistema y el juego de Tetris.
|
|
- Coordinar la ejecución de tareas concurrentes.
|
|
- Proveer métodos para actualizar métricas del sistema, tiempo, temperatura y correos.
|
|
|
|
---
|
|
|
|
### 3. `ThreadenTask` (ubicada en `src/services/threaden_task.py`)
|
|
|
|
Clase auxiliar para manejar hilos individuales.
|
|
|
|
- **Responsabilidades**:
|
|
- Iniciar y detener hilos de manera segura.
|
|
- Garantizar que los hilos se ejecuten en segundo plano como demonios.
|
|
|
|
---
|
|
|
|
### 4. `ProcessManager` (ubicada en `src/services/processes_manager.py`)
|
|
|
|
Permite abrir programas, archivos o URLs desde la aplicación.
|
|
|
|
- **Responsabilidades**:
|
|
- Abrir recursos como navegadores web, programas o archivos.
|
|
- Manejar errores y proporcionar mensajes de fallback en caso de fallos.
|
|
|
|
---
|
|
|
|
### 5. `Scrapper` (ubicada en `src/services/scrapper.py`)
|
|
|
|
Clase encargada de realizar el scrapping web y almacenar los enlaces encontrados en una base de datos.
|
|
|
|
- **Responsabilidades**:
|
|
- Extraer enlaces de páginas web utilizando `BeautifulSoup`.
|
|
- Almacenar los enlaces en una base de datos MySQL.
|
|
- Actualizar la interfaz de usuario con los enlaces encontrados.
|
|
- Manejar múltiples tareas de scrapping de manera concurrente.
|
|
|
|
---
|
|
|
|
### 6. `SystemMonitor` (ubicada en `src/services/system_monitor.py`)
|
|
|
|
Monitorea métricas del sistema en tiempo real y las muestra en gráficos.
|
|
|
|
- **Responsabilidades**:
|
|
- Obtener métricas como uso de CPU, RAM y red utilizando `psutil`.
|
|
- Mostrar gráficos en tiempo real utilizando `matplotlib`.
|
|
- Actualizar los gráficos dinámicamente con nuevos datos.
|
|
|
|
---
|
|
|
|
### 7. `TetrisGame` (ubicada en `src/services/tetris_game.py`)
|
|
|
|
Implementa un juego de Tetris completamente funcional dentro de la aplicación.
|
|
|
|
- **Responsabilidades**:
|
|
- Gestionar la lógica del juego, incluyendo movimiento, rotación y colocación de piezas.
|
|
- Detectar líneas completas y actualizarlas.
|
|
- Manejar eventos de teclado para controlar el juego.
|
|
|
|
---
|
|
|
|
### 8. `RadioPlayer` (ubicada en `src/services/Radio_Player.py`)
|
|
|
|
Esta clase permite la reproducción de emisoras de radio en línea dentro de la aplicación. Utiliza la biblioteca `vlc` para manejar la reproducción de audio y está integrada con la interfaz gráfica para seleccionar y controlar las emisoras.
|
|
|
|
- **Responsabilidades**:
|
|
- Reproducir emisoras de radio desde URLs proporcionadas.
|
|
- Manejar la reproducción en segundo plano utilizando hilos.
|
|
- Detener la reproducción de la emisora actual.
|
|
|
|
- **Métodos principales**:
|
|
- `play(url)`: Inicia la reproducción de la emisora desde la URL proporcionada.
|
|
- `stop()`: Detiene la reproducción de la emisora actual.
|
|
- `play_radio(url)`: Método interno que maneja la reproducción continua de la emisora en un hilo.
|
|
|
|
- **Integración con la interfaz**:
|
|
- La funcionalidad de la radio está disponible en la pestaña "Radio" de la aplicación.
|
|
- Los usuarios pueden seleccionar una emisora de una lista desplegable y controlarla con botones de "Reproducir" y "Detener".
|
|
|
|
---
|
|
|
|
## Uso de la funcionalidad de radio
|
|
|
|
1. Ve a la pestaña "Radio" en la aplicación.
|
|
2. Selecciona una emisora de la lista desplegable.
|
|
3. Haz clic en el botón "Reproducir" para iniciar la reproducción.
|
|
4. Para detener la reproducción, haz clic en el botón "Detener".
|
|
|
|
---
|
|
|
|
## Ejemplo de emisoras disponibles
|
|
|
|
- **Box Radio UK**: `http://uk2.internet-radio.com:8024/`
|
|
- **Jazz Radio**: `http://us2.internet-radio.com:8443/`
|
|
- **Deep House Radio**: `http://uk7.internet-radio.com:8000/`
|
|
|
|
Puedes agregar más emisoras modificando el diccionario `radio_stations` en la pestaña "Radio" dentro del archivo `src/ui/centered_window.py`.
|
|
|
|
---
|
|
|
|
## Requisitos del sistema
|
|
|
|
- Python 3.8 o superior.
|
|
- Bibliotecas necesarias (instalables con `pip`):
|
|
- `customtkinter`
|
|
- `psutil`
|
|
- `matplotlib`
|
|
- `requests`
|
|
- `beautifulsoup4`
|
|
- `mysql-connector-python`
|
|
- `python-vlc`
|
|
|
|
---
|
|
|
|
## Instalación
|
|
|
|
1. Clona este repositorio:
|
|
```
|
|
bash
|
|
git clone https://github.com/DennisEckerskorn/MultiAppRepo.git
|
|
cd MultiAppRepo
|
|
```
|
|
|
|
2. Instala las dependencias:
|
|
```
|
|
bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
3. Configura la base de datos MySQL:
|
|
- Crea una base de datos llamada `scrap_links_db`.
|
|
- Asegúrate de que las credenciales en `Scrapper` coincidan con tu configuración.
|
|
|
|
4. Ejecuta la aplicación:
|
|
```
|
|
bash
|
|
python src/main.py
|
|
```
|
|
|
|
|
|
---
|
|
|
|
## Uso
|
|
|
|
1. **Scrapping**:
|
|
- Introduce una URL en el panel izquierdo y haz clic en "Iniciar Scrapping".
|
|
- Los enlaces encontrados se mostrarán en la pestaña "Scrapping".
|
|
|
|
2. **Monitor del sistema**:
|
|
- Ve a la pestaña "Sistema" para ver gráficos en tiempo real de CPU, RAM y red.
|
|
|
|
3. **Juego de Tetris**:
|
|
- Ve a la pestaña "Juego" y haz clic en "Start Game" para comenzar a jugar.
|
|
|
|
4. **Gestión de procesos**:
|
|
- Usa los botones del panel izquierdo para abrir programas o URLs.
|
|
|
|
---
|
|
|
|
## Enlace al video de demostración:
|
|
[Ver video de demostración](https://youtu.be/8Gc7rDi7H-c)
|
|
|
|
|
|
## Autor
|
|
|
|
Desarrollado por Dennis Eckerskorn.
|