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
# 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 Startstop_requested: Émis quand l'utilisateur clique sur Stoppause_requested: Émis quand l'utilisateur clique sur Pauseemergency_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:
AnimatedSuggestionOverlayavec effet de pulsation
Format de décision
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.
cd geniusia2/gui
python demo_gui.py
Utilisation
Exemple basique
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
# 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:
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)