Python : Pythondialog

De www.yakakliker.org

Installation

sudo apt install dialog
pip install pythondialog

Exemple

import json
from dialog import Dialog

# Initialisation de l'objet Dialog
# autowidgetsize=True permet d'ajuster la taille selon le contenu
d = Dialog(dialog="dialog", autowidgetsize=True)
FICHIER = "mes_invites.json"

def charger_donnees():
    try:
        with open(FICHIER, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []

def sauvegarder_donnees(liste):
    with open(FICHIER, "w", encoding="utf-8") as f:
        json.dump(liste, f, indent=4, ensure_ascii=False)

def main():
    invites = charger_donnees()

    while True:
        # Affichage du menu principal
        # Format : (Code_Retour, Tag_Selectionné)
        code, tag = d.menu("Gestionnaire d'Invités",
                           choices=[("1", "Voir les invités"),
                                    ("2", "Ajouter un invité"),
                                    ("3", "Supprimer un invité"),
                                    ("4", "Quitter")])

        if code == d.CANCEL or tag == "4":
            break

        if tag == "1":
            # Construction de la chaîne de caractères pour l'affichage
            texte = "\n".join([f"• {i['nom']} ({i['age']} ans)" for i in invites])
            d.msgbox(texte if texte else "La liste est vide.", title="Liste des invités")

        elif tag == "2":
            # Saisie du nom
            code_nom, nom = d.inputbox("Entrez le nom de l'invité :")
            if code_nom == d.OK and nom:
                # Saisie de l'âge
                code_age, age = d.inputbox(f"Âge de {nom} :")
                if code_age == d.OK and age.isdigit():
                    invites.append({"nom": nom, "age": int(age)})
                    sauvegarder_donnees(invites)
                    d.msgbox("Invité ajouté !", title="Succès")
                else:
                    d.msgbox("Erreur : Âge invalide.", title="Erreur")

        elif tag == "3":
            # Création d'une liste de choix pour la suppression
            choix_suppr = [(str(i), f"{inv['nom']} ({inv['age']} ans)") 
                           for i, inv in enumerate(invites)]
            if choix_suppr:
                code_s, tag_s = d.menu("Choisissez l'invité à supprimer :", choices=choix_suppr)
                if code_s == d.OK:
                    index = int(tag_s)
                    invites.pop(index)
                    sauvegarder_donnees(invites)
            else:
                d.msgbox("Personne à supprimer.")

if __name__ == "__main__":
    main()

Analyse

  • d.menu() : Affiche une liste de choix. Vous devez fournir une liste de tuples (Tag, Description). C'est le "Tag" qui est renvoyé par la fonction.
  • d.msgbox() : Une simple boîte d'information avec un bouton "OK".
  • d.inputbox() : Une zone de saisie. Elle renvoie un code (OK/CANCEL) et la chaîne de caractères tapée.
  • Navigation : Vous utilisez les flèches pour le menu, et la touche Tabulation pour passer du menu aux boutons "OK/Annuler".

Pour créer un binaire / exécutable

pyinstaller --noconsole --onefile main.py