# 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)