Application desktop locale Python / PySide6 / Qt Widgets / Qt WebEngine pour afficher et piloter 9 pages web indépendantes dans une grille 3x3.
- 9 carreaux indépendants, tous vides au démarrage la première fois
- Chargement d'URL par carreau avec normalisation robuste
- Navigation indépendante : retour, avancer, recharger
- Zoom indépendant par carreau
- Mémoire persistante automatique des pages ouvertes, par carreau
- Restauration au démarrage des URLs et du zoom de chaque carreau
- Restauration du mode focus si l'application a été fermée en focus
- Barre mémoire 1 à 9 dans l'en-tête pour accéder rapidement aux carreaux
- Bouton
🔄 Toutpour recharger tous les carreaux chargés - Rail latéral de miniatures en mode focus
- Voyants d'état sur les miniatures
- Fermeture d'un carreau et retour à l'état vide
- Plein écran global de l'application
- Architecture modulaire, maintenable et extensible
- Python 3.11+ recommandé
- PySide6 avec Qt WebEngine
python -m venv .venv.venv\Scripts\activate
pip install -r requirements.txtsource .venv/bin/activate
pip install -r requirements.txtpython main.pyLa V1 utilise un profil WebEngine partagé entre les 9 carreaux.
Cela permet un comportement cohérent pour les cookies, le cache et les sessions, tout en gardant une architecture prête à évoluer vers des profils séparés par carreau.
L'application enregistre localement un fichier de session avec :
- les URLs actives par carreau,
- le zoom par carreau,
- le carreau affiché en focus,
- la taille de la fenêtre.
Au prochain démarrage, la disposition logique est restaurée.
Les demandes window.open() et ouvertures de nouvelle fenêtre sont redirigées dans le carreau courant au lieu d'ouvrir une nouvelle fenêtre native non contrôlée.
Cela garde la maîtrise de l'interface.
Le plein écran déclenché par une page web est refusé en V1 pour éviter les conflits avec :
- le mode focus de l'application,
- le plein écran global de l'application.
Les miniatures sont des captures pragmatiques du widget visible.
Quand un carreau n'est plus visible (par exemple si un autre carreau est affiché en mode focus), sa miniature conserve la dernière capture connue jusqu'à la prochaine mise à jour visible.
C'est un compromis volontaire entre coût CPU/GPU, stabilité et utilité.
multisite_dashboard/
main.py
requirements.txt
README.md
app/
__init__.py
config.py
session_store.py
styles.py
state.py
url_utils.py
web_profile.py
widgets/
__init__.py
dashboard_grid.py
focus_view.py
thumbnail_rail.py
web_tile.py
windows/
__init__.py
main_window.py
- Lancer l'application sans charger de site
- Charger une seule URL
- Charger 9 URLs
- Vérifier que la barre mémoire 1-9 reflète les carreaux chargés
- Utiliser les boutons 1-9 pour basculer rapidement en focus
- Tester le bouton
💾dans un carreau pour forcer une sauvegarde immédiate - Tester
🔄 Tout - Fermer l'application avec plusieurs pages ouvertes
- Relancer et vérifier la restauration
- Tester une URL invalide
- Utiliser retour / avancer / recharger
- Tester le zoom
- Fermer un carreau
- Revenir à la grille
- Redimensionner la fenêtre
- Passer en plein écran global puis revenir