baklava/doc/Zenity2.md

144 lines
4.9 KiB
Markdown
Raw Normal View History

2026-09-01 10:46:36 +02:00
je veux créer un script python avec Yad ou Zenity pour afficher des widgets dynamiques depuis une commande CLI
---
Créer un script Python qui utilise **Yad** ou **Zenity** pour afficher des widgets dynamiques depuis la ligne de commande est une excellente idée pour des interfaces graphiques simples et interactives. Voici comment procéder pour chaque outil, avec des exemples concrets et des explications.
---
## 1. **Zenity (plus simple, souvent préinstallé sur GNOME)**
Zenity permet de créer des boîtes de dialogue GTK depuis un script shell ou Python. Voici un exemple de base :
### Exemple : Boîte de dialogue avec entrée utilisateur
```python
import subprocess
def zenity_entry(title, text):
cmd = ["zenity", "--entry", "--title", title, "--text", text]
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout.strip()
def zenity_list(title, columns, data):
cmd = ["zenity", "--list", "--title", title, "--column", columns[0], "--column", columns[1]]
cmd.extend(data)
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout.strip()
# Exemple d'utilisation
if __name__ == "__main__":
name = zenity_entry("Saisie", "Entrez votre nom :")
if name:
options = ["Option 1", "Val1", "Option 2", "Val2"]
choice = zenity_list("Choix", ["Option", "Valeur"], options)
print(f"Vous avez choisi : {choice}")
```
### Autres widgets Zenity
- `--info` : Boîte d'information
- `--warning` : Boîte d'avertissement
- `--error` : Boîte d'erreur
- `--progress` : Barre de progression
- `--file-selection` : Sélecteur de fichier
- `--calendar` : Sélecteur de date
---
## 2. **Yad (plus puissant, plus de widgets)**
Yad est une alternative à Zenity avec plus de fonctionnalités (onglets, tableaux, HTML, etc.). Il n'est pas toujours préinstallé, mais très puissant.
### Installation (si nécessaire)
```bash
sudo apt install yad # Debian/Ubuntu
sudo dnf install yad # Fedora
```
### Exemple : Formulaire avec Yad
```python
import subprocess
def yad_form(title, fields):
cmd = ["yad", "--form", "--title", title]
for field in fields:
cmd.extend(["--field", f"{field['label']}:{field['type']}"])
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout.strip().split("|")
# Exemple d'utilisation
if __name__ == "__main__":
fields = [
{"label": "Nom", "type": "txt"},
{"label": "Âge", "type": "num"},
{"label": "Date", "type": "date"},
{"label": "Fichier", "type": "file"},
]
data = yad_form("Formulaire", fields)
print("Données saisies :", data)
```
### Autres widgets Yad
- `--list` : Liste personnalisable
- `--tree` : Arbre hiérarchique
- `--notebook` : Onglets
- `--html` : Affichage HTML
- `--progress` : Barre de progression avancée
- `--color` : Sélecteur de couleur
---
## 3. **Exemple complet : Menu interactif avec Yad**
Voici un script Python qui affiche un menu interactif avec Yad, puis agit en fonction du choix de l'utilisateur :
```python
import subprocess
def yad_menu(title, options):
cmd = ["yad", "--list", "--title", title, "--column", "Choix", "--width=400", "--height=300"]
cmd.extend(options)
result = subprocess.run(cmd, capture_output=True, text=True)
return result.stdout.strip().split("|")[0]
def yad_info(title, text):
subprocess.run(["yad", "--info", "--title", title, "--text", text, "--width=300"])
if __name__ == "__main__":
options = ["Ouvrir un fichier", "Enregistrer", "Quitter"]
choice = yad_menu("Menu Principal", options)
if choice == "Ouvrir un fichier":
file = subprocess.run(["yad", "--file", "--title", "Sélectionnez un fichier"], capture_output=True, text=True).stdout.strip()
yad_info("Fichier sélectionné", f"Vous avez choisi : {file}")
elif choice == "Enregistrer":
yad_info("Enregistrement", "Fonctionnalité à implémenter")
elif choice == "Quitter":
exit(0)
```
---
## 4. **Gestion des erreurs et conseils**
- **Vérifiez la présence de Yad/Zenity** :
```python
import shutil
if not shutil.which("yad"):
print("Yad n'est pas installé. Installez-le avec : sudo apt install yad")
```
- **Utilisez `subprocess.run`** avec `capture_output=True` et `text=True` pour récupérer la sortie.
- **Testez toujours** vos commandes Yad/Zenity en ligne de commande avant de les intégrer en Python.
---
## 5. **Aller plus loin**
- **Yad** : [Documentation officielle](https://sourceforge.net/p/yad-dialog/wiki/Home/)
- **Zenity** : [Documentation GNOME](https://help.gnome.org/users/gnome-help/3.32/util-zenity.html)
---
### Quel outil choisir ?
- **Zenity** : Simple, léger, idéal pour des boîtes de dialogue basiques.
- **Yad** : Plus puissant, pour des interfaces complexes (formulaires, onglets, etc.).
---
**Veux-tu un exemple plus spécifique (barre de progression, tableau, etc.) ou as-tu une idée précise de ce que tu veux afficher ?**