194 lines
5.6 KiB
Markdown
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)
|