Files
Geniusia_v2/geniusia2/gui/README.md
2026-03-05 00:20:25 +01:00

194 lines
5.6 KiB
Markdown

# Module GUI - Interface Utilisateur PyQt5
## Vue d'ensemble
Ce module fournit l'interface utilisateur minimale pour RPA Vision V2, incluant les indicateurs de mode, les contrôles système et les superpositions de suggestion.
## Composants
### 1. MinimalGUI (`minimal_gui.py`)
Interface principale de l'application avec:
- **Indicateurs de mode**: Affichage visuel du mode actuel (👀 Shadow, 🤝 Assisté, 🤖 Autopilot)
- **Contrôles**: Boutons Start, Pause et Stop pour contrôler le système
- **Notifications**: Système de notification intégré avec types (info, success, warning, error)
- **Raccourcis clavier**: Support des raccourcis pour un contrôle rapide
#### Méthodes principales
```python
# Mettre à jour l'indicateur de mode
gui.update_mode_indicator("shadow") # "shadow", "assist", "auto"
# Afficher une notification
gui.show_notification("Message", "success") # Types: info, success, warning, error
# Afficher une suggestion et attendre le retour
feedback = gui.show_suggestion(decision, animated=True)
# Retourne: "accept", "reject", ou "correct"
```
#### Signaux PyQt5
- `start_requested`: Émis quand l'utilisateur clique sur Start
- `stop_requested`: Émis quand l'utilisateur clique sur Stop
- `pause_requested`: Émis quand l'utilisateur clique sur Pause
- `emergency_stop_requested`: Émis lors d'un arrêt d'urgence
### 2. SuggestionOverlay (`suggestion_overlay.py`)
Superposition transparente pour afficher les suggestions d'actions avec surlignage visuel.
#### Fonctionnalités
- **Surlignage visuel**: Met en évidence l'élément UI suggéré avec un rectangle coloré
- **Panneau d'information**: Affiche les détails de l'action suggérée
- **Contrôles utilisateur**: Boutons et raccourcis pour accepter/refuser/corriger
- **Version animée**: `AnimatedSuggestionOverlay` avec effet de pulsation
#### Format de décision
```python
decision = {
"action_type": "click", # Type d'action
"target_element": "bouton_valider", # Nom de l'élément cible
"bbox": (x, y, w, h), # Coordonnées de la bounding box
"confidence": 0.95, # Score de confiance (0-1)
"description": "Description..." # Description optionnelle
}
```
#### Raccourcis clavier
- **Entrée**: Accepter la suggestion
- **Échap**: Refuser la suggestion
- **Alt+C**: Demander une correction
### 3. Script de démonstration (`demo_gui.py`)
Script pour tester l'interface GUI de manière autonome.
```bash
cd geniusia2/gui
python demo_gui.py
```
## Utilisation
### Exemple basique
```python
from PyQt5.QtWidgets import QApplication
from geniusia2.gui import MinimalGUI
import sys
app = QApplication(sys.argv)
gui = MinimalGUI()
# Connecter les signaux
gui.start_requested.connect(lambda: print("Start demandé"))
gui.stop_requested.connect(lambda: print("Stop demandé"))
# Afficher l'interface
gui.show()
# Mettre à jour le mode
gui.update_mode_indicator("assist")
# Afficher une notification
gui.show_notification("Système prêt", "success")
sys.exit(app.exec_())
```
### Exemple avec suggestion
```python
# Créer une décision d'action
decision = {
"action_type": "click",
"target_element": "bouton_soumettre",
"bbox": (450, 320, 120, 40),
"confidence": 0.97,
"description": "Cliquer pour soumettre le formulaire"
}
# Afficher la suggestion et attendre le retour
feedback = gui.show_suggestion(decision, animated=True)
if feedback == "accept":
print("Action acceptée par l'utilisateur")
elif feedback == "reject":
print("Action refusée par l'utilisateur")
elif feedback == "correct":
print("Correction demandée par l'utilisateur")
```
## Intégration avec l'orchestrateur
L'interface GUI est conçue pour s'intégrer avec l'orchestrateur:
```python
from geniusia2.core.orchestrator import Orchestrator
from geniusia2.gui import MinimalGUI
# Créer l'orchestrateur
orchestrator = Orchestrator(...)
# Créer la GUI avec référence à l'orchestrateur
gui = MinimalGUI(orchestrator)
# Connecter les signaux
gui.start_requested.connect(orchestrator.start)
gui.stop_requested.connect(orchestrator.stop)
gui.pause_requested.connect(orchestrator.pause)
gui.emergency_stop_requested.connect(orchestrator.emergency_stop)
# L'orchestrateur peut mettre à jour la GUI
orchestrator.mode_changed.connect(gui.update_mode_indicator)
orchestrator.notification_needed.connect(gui.show_notification)
```
## Exigences satisfaites
### Exigence 1.5
- ✓ Indicateur visuel du Mode_Shadow (icône 👀)
### Exigence 2.1
- ✓ Surlignage des Élément_UI suggérés avec superposition visuelle claire
### Exigence 2.2
- ✓ Attente d'entrée utilisateur explicite (Entrée/Échap/Alt+C)
### Exigence 2.3, 2.4, 2.5
- ✓ Gestion des retours utilisateur (validation, refus, correction)
### Exigence 2.7
- ✓ Indicateur visuel du Mode_Assisté (icône 🤝)
### Exigence 3.7
- ✓ Indicateur visuel du Mode_Autopilot (icône 🤖)
## Dépendances
- PyQt5 >= 5.15.9
- PyQt5-Qt5 >= 5.15.2
## Notes de développement
- L'interface est conçue pour être minimale et non intrusive
- Les superpositions utilisent la transparence pour ne pas bloquer la vue
- Les raccourcis clavier fonctionnent même quand la fenêtre n'a pas le focus (pour certains)
- L'arrêt d'urgence (Ctrl+Pause) doit être géré au niveau système par l'orchestrateur
- Les notifications s'effacent automatiquement après 5 secondes
- La version animée de la superposition utilise un effet de pulsation pour attirer l'attention
## Améliorations futures possibles
- Support multi-écran amélioré
- Thèmes personnalisables (clair/sombre)
- Historique des suggestions dans l'interface
- Graphiques de confiance en temps réel
- Support de la localisation (i18n)