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 ?**