2026-10-01 16:04:37 +02:00

201 lines
6.5 KiB
Markdown

# Python Application Template
> Un socle desktop PyQt6 pret a personnaliser pour lancer rapidement une application Python moderne sous Windows.
Ce template fournit une base complete pour une application de bureau : fenetre principale, ecran de chargement, themes, traductions, gestion des parametres, mises a jour et generation d'un executable avec PyInstaller.
## Apercu
- Interface graphique construite avec **PyQt6**
- Themes `dark` et `light` facilement extensibles
- Traductions francaise et anglaise
- Ecran de demarrage avec progression
- Parametres persistants entre les lancements
- Verification des mises a jour depuis GitHub ou Gitea
- Onglet de suggestions avec envoi SMTP asynchrone
- Build automatise pour Windows et script prevu pour macOS/Linux
## Demarrage rapide
### Prerequis
- Python 3 disponible dans le `PATH`
- Windows pour utiliser les scripts `.bat`
- PowerShell pour la lecture de `config.json` par les scripts Windows
- VS Code et la commande `code` pour utiliser `tools/open.bat`
### Installation manuelle
Depuis la racine du projet :
```powershell
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r config\requirements.txt
python main.py
```
Si PowerShell bloque l'activation de l'environnement, lancez directement :
```powershell
.venv\Scripts\python.exe main.py
```
### Installation automatisee sous Windows
Le script suivant cree l'environnement dedie dans `config/WINenv_x64`, installe les dependances puis ouvre le projet dans VS Code :
```powershell
tools\open.bat
```
> `open.bat` prepare le workspace mais ne lance pas directement l'application. Utilisez ensuite `python main.py` depuis l'environnement actif.
## Configuration
### Identite de l'application
Les informations generales sont centralisees dans [config.json](config.json) :
```json
{
"app_name": "Application",
"app_os": "Windows",
"app_version": "1.0.0",
"architecture": "x64",
"icon_path": "data/assets/icon.ico",
"splash_image": "splash",
"main_script": "main.py",
"git_repo": "https://example.com/owner/repository"
}
```
Adaptez au minimum `app_name`, `app_version`, `icon_path` et `git_repo` avant de distribuer votre application.
### Variables d'environnement
Copiez `.env.example` vers `.env`, puis renseignez les valeurs necessaires :
```powershell
Copy-Item .env.example .env
```
Variables disponibles :
| Variable | Role |
| --- | --- |
| `PYTHON_PATH` | Interpreteur Python utilise par les scripts de build |
| `EMAIL_ADDRESS` | Adresse SMTP utilisee pour recevoir les suggestions |
| `EMAIL_PASSWORD` | Mot de passe applicatif SMTP |
| `EMAIL_SMTP_SERVER` | Serveur SMTP, par defaut `smtp.gmail.com` |
| `EMAIL_SMTP_PORT` | Port SMTP, par defaut `587` |
Ne committez jamais `.env` ni un mot de passe SMTP. Pour Gmail, utilisez un mot de passe d'application plutot que le mot de passe principal du compte.
## Execution et build
### Lancer l'application
```powershell
python main.py
```
Au demarrage, l'application initialise ses gestionnaires, verifie les mises a jour disponibles, puis affiche la fenetre principale.
### Generer l'executable Windows
```powershell
tools\build.bat
```
Le script :
1. cree l'environnement virtuel correspondant a l'architecture configuree ;
2. installe les dependances ;
3. execute PyInstaller avec `config/BUILD.spec` ;
4. place l'application generee dans `build/`.
Le resultat est un executable sans console, adapte a une application graphique Windows.
### macOS et Linux
Les scripts Unix sont maintenant disponibles pour macOS et Linux.
Pour preparer l'environnement et ouvrir le projet :
```bash
bash tools/open.command
```
Le script choisit automatiquement `MACenv_<architecture>` sur macOS ou `LINenv_<architecture>` sur Linux, installe les dependances, puis ouvre le projet avec la commande `code`. A defaut, il utilise `open` sur macOS ou `xdg-open` sur Linux.
Pour construire l'application :
```bash
bash tools/build.command
```
Sur macOS, il utilise un environnement `MACenv_<architecture>`, produit une application `.app` et cree une archive ZIP dans `build/`. Sur Linux, il utilise `LINenv_<architecture>`, produit un binaire executable ainsi qu'un fichier `.desktop`, puis cree une archive ZIP dans `build/`.
La commande `zip` doit etre installee sur le systeme pour generer l'archive.
## Structure du projet
```text
.
├── app/
│ ├── core/ # Gestionnaires : langue, theme, parametres, mises a jour...
│ ├── ui/ # Fenetre principale, ecrans et widgets PyQt6
│ └── utils/ # Utilitaires partages, notamment les chemins
├── config/
│ ├── BUILD.spec # Configuration PyInstaller
│ └── requirements.txt # Dependances Python
├── data/
│ ├── assets/ # Icones et images
│ ├── lang/ # Fichiers de traduction JSON
│ ├── themes/ # Themes JSON et feuilles QSS
│ └── others/ # Valeurs par defaut
├── tools/ # Scripts d'installation, lancement et build
├── config.json # Configuration de l'application
└── main.py # Point d'entree
```
## Personnalisation
1. Modifiez `config.json` pour donner son identite a l'application.
2. Ajoutez ou adaptez les textes dans `data/lang/en.json` et `data/lang/fr.json`.
3. Creez un theme dans `data/themes/` et referencez-le dans le gestionnaire de themes.
4. Ajoutez vos vues dans `app/ui/` et votre logique metier dans `app/core/`.
5. Ajoutez les ressources necessaires dans `data/assets/`.
6. Mettez a jour `config/BUILD.spec` si votre application embarque de nouvelles ressources ou dependances dynamiques.
## Architecture simplifiee
```mermaid
flowchart TD
A[main.py] --> B[MainManager]
B --> C[SettingsManager]
B --> D[LanguageManager]
B --> E[ThemeManager]
B --> F[UpdateManager]
A --> G[SplashScreen]
A --> H[MainWindow]
H --> I[SettingsWindow]
H --> J[SuggestionWindow]
D --> K[data/lang]
E --> L[data/themes]
F --> M[GitHub ou Gitea]
```
## Dependances principales
- [PyQt6](https://pypi.org/project/PyQt6/) : interface graphique
- [PyInstaller](https://pyinstaller.org/) : generation de l'executable
- [Requests](https://pypi.org/project/requests/) : appels HTTP pour les mises a jour
- [python-dotenv](https://pypi.org/project/python-dotenv/) : chargement des variables d'environnement
## Licence
Aucune licence n'est actuellement definie dans le depot. Ajoutez un fichier `LICENSE` avant toute distribution publique.