Partage
  • Partager sur Facebook
  • Partager sur Twitter

Menu en python

    18 janvier 2020 à 23:39:51

    Bonjour, dans le cadre d'un exercice, je dois créer un menu en python qui doit proposer à l'utilisateur de choisir entre utiliser les fonctions que j'ai déjà créer soit quitter le menu. J'ai déjà commencer à faire le début du menu mais je ne sais pas comment faire demander à l'utilisateur ce que je vous est dit plus haut. Voici mon code ainsi que l'énoncé de l'exercice. Merci d'avoir lu
    from csv import *
    
    donnees=[]	# table des données
    
    # ouverture fichier csv
    fichier = open('prenom.csv', 'r', encoding='UTF8')		# ouverture fichier prenom.csv en lecture
    lecteur = reader(fichier, delimiter=";")				# lecteur de flux csv, separateur ;
    for ligne in lecteur:					# on parcourt les lignes du fichier
    	donnees.append(tuple(ligne))				# on ajoute chaque ligne dans la liste donnees
    fichier.close()							# on ferme le fichier
    
    
    
    
    def requete1(prenom,annees):
        str(annees)
        str(prenom)
        for colonne in donnees :
            if colonne[1]==prenom and colonne[2]==annees:
                print(colonne[3])
    
    
    
    def requete2(annees):
        liste_garçon=[]
        liste_fille=[]
        for ligne in donnees:
            if ligne[2]==annees and ligne[0]=='1':
                liste_garçon.append(list(ligne))
            elif ligne[2]==annees and ligne[0]=='2':
                liste_fille.append(list(ligne))
        for i in liste_garçon:
            i[3]=int(i[3])
        prénom_garçon=sorted(liste_garçon, key=lambda x: x[3])
        if prénom_garçon[-1][1]=='_PRENOMS_RARES':
            print('le prénom masculin le plus populaire en',annees,' est indisponible')
        else :
            print('le prénom masculin le plus populaire en',annees,'est',prénom_garçon[-1][1])
    
        for z in liste_fille:
            z[3]=int(z[3])
        prénom_fille=sorted(liste_fille, key=lambda x: x[3])
        if prénom_fille[-1][1]=='_PRENOMS_RARES':
            print('le prénom féminin le plus populaire en',annees,' est indisponible')
        else:
            print('le prénom féminin le plus populaire en',annees,'est', prénom_fille[-1][1])
    
    
    
    def requete3(prenom):
        liste=[]
        for ligne in donnees:
            if ligne[1]==prenom:
                liste.append(list(ligne))
        for i in liste:
            i[3]=int(i[3])
        liste_triée=sorted(liste, key=lambda x: x[3])
        print('le prénom',prenom,'a été donné le plus de fois en',liste_triée[-1][2])
    
    
    #coding: UTF-8
    from tkinter import *
    fen=Tk()
    fen.geometry("640x480")
    
    #Création de la barre des menus
    menuBar= Menu(fen)
    
    #Création des menus principaux
    menuFichier= Menu(menuBar)
    menuEdition=Menu(menuBar)
    menuOutils= Menu(menuBar)
    menuHelp= Menu(menuBar)
    
    #Ajout des menus principaux à la barre des menus
    menuBar.add_cascade(label="Fichier",menu=menuFichier)
    menuBar.add_cascade(label="Edition",menu=menuEdition)
    menuBar.add_cascade(label="Outil",menu=menuOutils)
    menuBar.add_cascade(label="Help",menu=menuHelp)
    
    #Ajout de commandes aux menus principaux
    
    
    fen.config(menu=menuBar)
    fen.mainloop()
    

    -
    Edité par PatrickPalovski 18 janvier 2020 à 23:40:49

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2020 à 23:45:18

      Salut,

      Je ne m'en souviens plus exactement, mais ce que tu souhaites faire c'est de l'interaction entre l'utilisateur et le programme. Va sur tkinter fdex, et lis les pages Bouton, Menu et Menu grille (de mémoire), tu devrais comprendre le concept. Mais, en gros, tu veux que lorsque l'utilisateur clique sur un des menus ça fasse les actions prévues ?

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2020 à 0:06:32

        Le Cobriste 128 a écrit:

        Salut,

        Je ne m'en souviens plus exactement, mais ce que tu souhaites faire c'est de l'interaction entre l'utilisateur et le programme. Va sur tkinter fdex, et lis les pages Bouton, Menu et Menu grille (de mémoire), tu devrais comprendre le concept. Mais, en gros, tu veux que lorsque l'utilisateur clique sur un des menus ça fasse les actions prévues ?

        Oui c'est exactement sa

        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2020 à 0:07:53

          Le Cobriste 128 a écrit:

          Va sur tkinter fdex, et lis les pages Bouton, Menu et Menu grille (de mémoire), tu devrais comprendre le concept.

          T'as plus qu'à ;)

          • Partager sur Facebook
          • Partager sur Twitter
            19 janvier 2020 à 12:11:33

            Le Cobriste 128 a écrit:

            Le Cobriste 128 a écrit:

            Va sur tkinter fdex, et lis les pages Bouton, Menu et Menu grille (de mémoire), tu devrais comprendre le concept.

            T'as plus qu'à ;)

            jai compris comment ajouter des commandes à un menu mais je ne comprend pas comment ajouter une fonction avec plusieurs paramètres en tant que commandes car cela m'affiche l'erreur suivante :  menuFichier.add_command(label='Requete1', command=requete1(prenom,annees))
            NameError: name 'prenom' is not defined
            Voici mon code :
            from csv import *
            
            donnees=[]	# table des données
            
            # ouverture fichier csv
            fichier = open('prenom.csv', 'r', encoding='UTF8')		# ouverture fichier prenom.csv en lecture
            lecteur = reader(fichier, delimiter=";")				# lecteur de flux csv, separateur ;
            for ligne in lecteur:					# on parcourt les lignes du fichier
            	donnees.append(tuple(ligne))				# on ajoute chaque ligne dans la liste donnees
            fichier.close()							# on ferme le fichier
            
            
            
            
            def requete1(prenom,annees):
                liste=[]
                str(annees)
                str(prenom)
                for colonne in donnees :
                    if colonne[1]==prenom and colonne[2]==annees:
                        liste.append(int(colonne[3]))
                print('En',annees,'il y avait',sum(liste),'individus portant le prénom',prenom)
            
            
            
            
            
            def requete2(annees):
                liste_garçon=[]
                liste_fille=[]
                for ligne in donnees:
                    if ligne[2]==annees and ligne[0]=='1':
                        liste_garçon.append(list(ligne))
                    elif ligne[2]==annees and ligne[0]=='2':
                        liste_fille.append(list(ligne))
                for i in liste_garçon:
                    i[3]=int(i[3])
                prénom_garçon=sorted(liste_garçon, key=lambda x: x[3])
                if prénom_garçon[-1][1]=='_PRENOMS_RARES':
                    print('le prénom masculin le plus populaire en',annees,' est indisponible')
                else :
                    print('le prénom masculin le plus populaire en',annees,'est',prénom_garçon[-1][1])
            
                for z in liste_fille:
                    z[3]=int(z[3])
                prénom_fille=sorted(liste_fille, key=lambda x: x[3])
                if prénom_fille[-1][1]=='_PRENOMS_RARES':
                    print('le prénom féminin le plus populaire en',annees,' est indisponible')
                else:
                    print('le prénom féminin le plus populaire en',annees,'est', prénom_fille[-1][1])
            
            
            
            def requete3(prenom):
                liste=[]
                for ligne in donnees:
                    if ligne[1]==prenom:
                        liste.append(list(ligne))
                for i in liste:
                    i[3]=int(i[3])
                liste_triée=sorted(liste, key=lambda x: x[3])
                print('le prénom',prenom,'a été donné le plus de fois en',liste_triée[-1][2])
            
            
            #coding: UTF-8
            from tkinter import *
            fen=Tk()
            fen.geometry("640x480")
            
            #Création de la barre des menus
            menuBar= Menu(fen)
            
            #Création des menus principaux
            menuFichier= Menu(menuBar)
            menuEdition=Menu(menuBar)
            menuOutils= Menu(menuBar)
            menuHelp= Menu(menuBar)
            
            #Ajout des menus principaux à la barre des menus
            menuBar.add_cascade(label="Fichier",menu=menuFichier)
            menuBar.add_cascade(label="Edition",menu=menuEdition)
            menuBar.add_cascade(label="Outil",menu=menuOutils)
            menuBar.add_cascade(label="Help",menu=menuHelp)
            
            #Ajout de commandes aux menus principaux
            menuFichier.add_command(label='Requete1', command=requete1(prenom,annees))
            
            fen.config(menu=menuBar)
            fen.mainloop()
            
            
            
            
            
            
            
            
            
            
            
            
            


            • Partager sur Facebook
            • Partager sur Twitter
              19 janvier 2020 à 14:44:49

              Salut,

              Je comprends, à peu près parce que je suis flemmard et je lis pas les codes en entier. Donc, le paramètre command a comme argument final le callable qui souvent est le nom de la fonction à appeler sans les parenthèses, car avec les parenthèses, la fonction se lancerait tout le temps.

              Alors, quand la fonction n'a pas de paramètre d'entrée, c'est facile : la fonction s'appelle fonction(), dans command on met fonction et basta.

              Comment faire si la fonction a des  paramètres d'entrée : fonction(param1, param2) ? On se sert d'un objet partial avec une fonction. Une façon "from scratch"

              En algo, imaginons que tu veux afficher la touche du clavier :

              /*
              je tape sur la touche 1 ça affiche 1,
              sur la touche 2 ça affiche 2 et ainsi de suite
              */
              
              Fonction appuyer(touche_memorise):
                  Fonction afficher():
                      ecrire(touche_memorise)
                  FIN Fonction afficher
                  retourner afficher
              FIN Fonction appuyer
              
              Bouton_ou_menu = (..., command=appuyer(touche), ...)

              Ici l'argument final est le callable afficher et non pas appuyer(touche), bien que c'est ce qu'il faut écrire en argument visible. Ça paraît compliqué, mais, c'est parce que l'ordi en interne il fait des calculs dans la fonction afficher() : ecrire(touche) et dans la fonction appuyer(touche) on retourne le callable afficher qui est bien l'argument de command.

              • Partager sur Facebook
              • Partager sur Twitter
                19 janvier 2020 à 16:52:34

                Le Cobriste 128 a écrit:

                Salut,

                Je comprends, à peu près parce que je suis flemmard et je lis pas les codes en entier. Donc, le paramètre command a comme argument final le callable qui souvent est le nom de la fonction à appeler sans les parenthèses, car avec les parenthèses, la fonction se lancerait tout le temps.

                Alors, quand la fonction n'a pas de paramètre d'entrée, c'est facile : la fonction s'appelle fonction(), dans command on met fonction et basta.

                Comment faire si la fonction a des  paramètres d'entrée : fonction(param1, param2) ? On se sert d'un objet partial avec une fonction. Une façon "from scratch"

                En algo, imaginons que tu veux afficher la touche du clavier :

                /*
                je tape sur la touche 1 ça affiche 1,
                sur la touche 2 ça affiche 2 et ainsi de suite
                */
                
                Fonction appuyer(touche_memorise):
                    Fonction afficher():
                        ecrire(touche_memorise)
                    FIN Fonction afficher
                    retourner afficher
                FIN Fonction appuyer
                
                Bouton_ou_menu = (..., command=appuyer(touche), ...)

                Ici l'argument final est le callable afficher et non pas appuyer(touche), bien que c'est ce qu'il faut écrire en argument visible. Ça paraît compliqué, mais, c'est parce que l'ordi en interne il fait des calculs dans la fonction afficher() : ecrire(touche) et dans la fonction appuyer(touche) on retourne le callable afficher qui est bien l'argument de command.

                Désolé je ne suis pas sur d'avoir compris, concrètement faut que j'écrive quoi à la place de command=requete1

                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2020 à 13:33:00

                  Salut,

                  Dans ce cas, ce que je fais c'est ouvrir un cahier de brouillon, prendre un stylo et j'écris les scénarios littéralement.

                  Dans mon algo, si je crée :

                  touche1 = (command=appuyer(1))

                  touche2 = (command=appuyer(2))

                  Je n'ai pas eu à définir autant de fonctions que de touches. C'est davantage lisible, et si je dois modifier ça me prends 30 secondes au lieu de 30 secondes x le nombre de touches.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Menu en python

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown