Initial commit
This commit is contained in:
193
geniusia2/gui/README.md
Normal file
193
geniusia2/gui/README.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user