Partage
  • Partager sur Facebook
  • Partager sur Twitter

"Erreur de code"

    27 décembre 2023 à 22:20:17

    Bonjour à tous, ce message a pour but de m'aider à comprendre pourquoi mon code ne fonctionne pas. Ceci n'est qu'un projet personnel.

    code :

    #module d'importation du tkinter
    from tkinter import messagebox
    from tkinter import *
    import tkinter
    from tkinter.ttk import *
    
    #fenêtre d'acceuil
    
    home = Tk()
    home.title("Learn in python")
    home.geometry("407x398")
    home.minsize(407,398)
    home.maxsize(430,398)
    
    #création de la page débutant
    def debutant_level():
        def definition_variable():
            def hide():
                label_definition.destroy()
                frame_debutant_def_variable.destroy()
            label_definition = Label(debutant_page, text="Définition d'une variable : ")
            label_definition.config(font=("Impact", 20), fg="red")
            frame_debutant_def_variable = Frame(debutant_page)
            text_def_variable = Text(frame_debutant_def_variable, wrap=WORD, height=6, width=80)
            text_def_variable.insert(INSERT, "En termes simples, une variable est un conteneur dans lequel tu peux stocker différents types de données,")
            text_def_variable.insert(INSERT, "comme des nombres, des chaînes de caractères ou même des objets plus complexes. ")
            text_def_variable.insert(INSERT, "Ces données peuvent ensuite être modifiées, récupérées et utilisées tout au long de ton programme.")
            text_def_variable.insert(INSERT, "Les variables deviennent vraiment utiles lorsqu’elles sont utilisées pour stocker des valeurs que tu souhaites manipuler ou comparer.")
            button_hide_def_variable = Button(frame_debutant_def_variable, text="Masquer",relief=GROOVE, activebackground="light blue", command=hide)
            label_definition.grid()
            frame_debutant_def_variable.grid()
            text_def_variable.grid()
            button_hide_def_variable.grid()
        def types_de_variable():
            def hide_types_variable():
                label_types_variable.destroy()
                frame_types_variable.destroy()
            label_types_variable = Label(debutant_page, text="Les différents types de variable :")
            label_types_variable.config(font=("Impact", 20), fg="red")
            frame_types_variable = Frame(debutant_page)
            text_types_variable = Text(frame_types_variable, wrap=WORD, height=4, width=80)
            text_types_variable.insert(INSERT, "-> bool : booléen (True ou False)\n")
            text_types_variable.insert(INSERT, "-> int : entier.\n")
            text_types_variable.insert(INSERT, "-> float : nombre flottant qui a la précision d'un double.\n")
            text_types_variable.insert(INSERT, "-> str : chaîne de caractère (string).")
            button_hide_types_variable = Button(frame_types_variable, text="Masquer", relief=GROOVE, command=hide_types_variable)
    
            label_types_variable.grid()
            frame_types_variable.grid()
            text_types_variable.grid()
            button_hide_types_variable.grid()
    
        debutant_page = Tk() 
        debutant_page.title("Niveau débutant")
        debutant_page.geometry("650x400")
        debutant_page.minsize(650,400)
        debutant_page.maxsize(650,400)
    
        menu_2 = tkinter.Menu(debutant_page)
    
        menu_variable = tkinter.Menu(menu_2, tearoff=0)
        menu_affichage = tkinter.Menu(menu_2, tearoff=0)
        menu_boucles = tkinter.Menu(menu_2, tearoff=0)
        menu_fonction = tkinter.Menu(menu_2, tearoff=0)
    
        menu_2.add_cascade(label="Les variables", menu=menu_variable)
        menu_2.add_cascade(label="Affichage", menu=menu_affichage)
        menu_2.add_cascade(label="Les boucles", menu=menu_boucles)
        menu_2.add_cascade(label="Les fonctions", menu=menu_fonction)
    
    
        menu_variable.add_command(label="1-Définition", command=definition_variable)
        menu_variable.add_command(label="2-Types de variables", command=types_de_variable)
        menu_variable.add_command(label="3-Opérations")
        menu_variable.add_command(label="4-Conclusion")
    
    
        debutant_page.config(menu=menu_2)
    
    def intermediaire_level():
        intermediaire_level = Tk()
        intermediaire_level.title("Niveau intermédiaire")
        intermediaire_level.geometry("410x400")
        intermediaire_level.minsize(410,400)
        intermediaire_level.maxsize(410,400)
    
    
    
    
    #création de la page expert
    def expert_level():
        expert_level = Tk()
        expert_level.title("Niveau expert")
        expert_level.geometry("410x400")
        expert_level.minsize(410,400)
        expert_level.maxsize(410,400)
    
    def a_propos():
    
        def hide_text_a_propos():
            frame_a_propos.destroy()
        
        frame_a_propos = Frame(home)
        text_a_propos = Text(frame_a_propos, wrap=WORD, height=8, width=50)
        text_a_propos.insert(INSERT, "Bonour, cette application à été créer dans le but de vous aprendre le language")
        text_a_propos.insert(INSERT, " de programation python. Je vous propose des cours, exercices, projets ...\n")
        text_a_propos.insert(INSERT, "Ce projet a été réaliser par une seule personne. Si il y a des bugs, ou autre, merci de vous nous en informer dans l'onglet aide et la catégorie aide.")
        bouton_a_propos_hide = Button(frame_a_propos, text="Masquer", command=hide_text_a_propos)
        text_a_propos.config(state=DISABLED)
    
        frame_a_propos.grid()
        text_a_propos.grid()
        bouton_a_propos_hide.grid()
    
    def version():
        messagebox.showwarning("Version:","This is the version 1.0.0")
    
    def confirm():
        confirmer = messagebox.askquestion("QUITTER ?","Es tu sur de vouloir quitter ?")
        if confirmer == 'yes':
            home.destroy()
    
    def aide_contact():
        def hide_text_aide():
            frame_aide_contact.destroy()
        frame_aide_contact = Frame(home)
        text_aide = Text (frame_aide_contact, wrap=WORD, height=1, width=50)
        text_aide.insert(INSERT, "exaple_mail@gmail.com")
        bouton_aide = Button(frame_aide_contact, text="Masquer", command=hide_text_aide)
        text_aide.config(state=DISABLED)
    
        frame_aide_contact.grid()
        text_aide.grid()
        bouton_aide.grid()
    
    #création de la barre de menu
    menu_1 = tkinter.Menu(home)
    
    #création des menus proposés
    menu_cours = tkinter.Menu(menu_1, tearoff=0)
    menu_exo = tkinter.Menu(menu_1, tearoff=0)
    menu_aide = tkinter.Menu(menu_1, tearoff=0)
    menu_quitter = tkinter.Menu(menu_1, tearoff=0)
    menu_1.add_cascade(label="Cours", menu=menu_cours)
    menu_1.add_cascade(label="Exercices", menu=menu_exo)
    menu_1.add_cascade(label="Aide", menu=menu_aide)
    menu_1.add_cascade(label="Quitter", menu=menu_quitter)
    
    #Mettre les éléments dans la cascade
    menu_cours.add_command(label="Débutant", command=debutant_level)
    menu_cours.add_command(label="Intermédiaire", command=intermediaire_level)
    menu_cours.add_command(label="Expert", command=expert_level)
    
    
    menu_exo.add_command(label="Exercices débutant")
    menu_exo.add_command(label="Exercices intérmediaire")
    menu_exo.add_command(label="Exercices expert")
    menu_exo.add_command(label="Projets réalisable")
    
    menu_aide.add_command(label="Versions", command=version)
    
    
    menu_quitter.add_command(label="Quitter", command=confirm)
    
    home.config(menu=menu_1)
    
    #LABEL,BOUTTON ...  HOME
    
    
    #GRID home(dans l'ordre)
    
    
    #MAINLOOP(home)
    home.mainloop()

    Merci d'avance pour votre aide qui me sera très précieuse.

    -
    Edité par TheoChesnel 27 décembre 2023 à 22:22:04

    • Partager sur Facebook
    • Partager sur Twitter
      27 décembre 2023 à 23:02:25

      Bonjour,

      Le but est de t'aider à avancer dans la résolution de problèmes.

      • Indiquer l'erreur spécifié par ton interpréteur
      • Présenter graphiquement ce qui ne va pas, et comment ça devrait être présenté normalement
      • Donner toutes informations utiles aux membres du forum
      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        27 décembre 2023 à 23:16:40

        Re-bonjour, je suis navré d'avoir oublié ces informations.

        message d'erreur :

        Exception in Tkinter callback
        Traceback (most recent call last):
          File "C:\Program Files\Python312\Lib\tkinter\__init__.py", line 1948, in __call__
            return self.func(*args)    
                   ^^^^^^^^^^^^^^^^    
          File "c:\Users\Théo\Documents\Projets python\Python tkinter 
        solo 1.1.py", line 22, in definition_variable
            label_definition.config(font=("Impact", 20), fg="red")
          File "C:\Program Files\Python312\Lib\tkinter\__init__.py", line 1702, in configure
            return self._configure('configure', cnf, kw)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "C:\Program Files\Python312\Lib\tkinter\__init__.py", line 1692, in _configure
            self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
        _tkinter.TclError: unknown option "-fg"

        Mon programme est censé afficher la définition d'une variable lorsque l'on clique dans le menu "cours" -> "débutant" -> "Les variables" -> "1-Définition".

        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2023 à 10:08:59

          Je pense qu'il n'y a pas pire que d'écrire ces deux lignes, il y a un gros risque de conflits entre ttk et tk.

          from tkinter import *
          from tkinter.ttk import *

           L'objet Label que tu utilises est-ce celui de Tkinter ou ttk ? Je pense que c'est ttk, donc une autre manière de configurer, c'est pour cela que ça ne fonctionne pas comme dans ton tuto.

          Si j'ai un conseil à te donner, c'est de juste travailler avec Tk et retirer ttk.

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            28 décembre 2023 à 10:54:29

            Bonjour, très bien j vais enlever cette ligne de code.

            Après avoir enlever cette ligne, ai-je des changements à faire dans mon code?

            • Partager sur Facebook
            • Partager sur Twitter
              28 décembre 2023 à 10:59:52

              Bonjour,

              Ca aussi, c'est redondant:

              from tkinter import *
              import tkinter

              Enlève import tkinter et remplace tous les tkinter.menu par Menu


              Pourquoi des fonctions qui contiennent des fonctions qui contiennent des fonctions ?

              -
              Edité par Phil_1857 28 décembre 2023 à 11:10:33

              • Partager sur Facebook
              • Partager sur Twitter
                28 décembre 2023 à 11:01:04

                TheoChesnel a écrit:

                Bonjour, très bien j vais enlever cette ligne de code.

                Après avoir enlever cette ligne, ai-je des changements à faire dans mon code?


                À vous de tester !
                • Partager sur Facebook
                • Partager sur Twitter

                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  28 décembre 2023 à 11:10:44

                  Suite à vos conseils j'ai enlever la ligne de code 

                  code:

                  from tkinter.ttk import *

                  Et mon code fonctionne normalement. Cependant, dès lors où je supprime :

                  import tkinter

                  Mon code ne fonctionne plus du tout :(

                  • Partager sur Facebook
                  • Partager sur Twitter
                    28 décembre 2023 à 11:15:45

                    Comme je viens de te le dire:

                    Enlève import tkinter et remplace tous les tkinter.menu par Menu


                    Pourquoi des fonctions qui contiennent des fonctions qui contiennent des fonctions ?

                    -
                    Edité par Phil_1857 28 décembre 2023 à 11:17:11

                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 décembre 2023 à 11:23:04

                      TheoChesnel a écrit:

                      Et mon code fonctionne normalement. Cependant, dès lors où je supprime :

                      import tkinter

                      Mon code ne fonctionne plus du tout :(

                      "import" charge le module et y associe la variable globale tkinter. Si on supprime cet import, les lignes qui contiennent des tkinter.Menu planteront avec un message de type NameError: le nom "tkinter" n'est pas définit.

                      Ce qui est logique!

                      Plutôt que de recopier à moitié les suggestions qu'on vous fait, essayez de comprendre ce qu'il se passe (surtout lorsqu'on a la chance d'avoir un message d'erreur aussi explicite).



                      -
                      Edité par mps 28 décembre 2023 à 11:23:41

                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 décembre 2023 à 11:58:08

                        Phil_1857 a écrit:

                        Comme je viens de te le dire:

                        Enlève import tkinter et remplace tous les tkinter.menu par Menu


                        Pourquoi des fonctions qui contiennent des fonctions qui contiennent des fonctions ?

                        -
                        Edité par Phil_1857 il y a 34 minutes

                        Merci beaucoup, ça a fonctionner en remplacent "tkinter.menu" par "Menu"

                        Pour te répondre par rapport aux fonctions que j'ai mis dans d'autre fonctions. C'est uniquement car je n'ai pas trouver d'autres 'solutions'. Est ce mal ou est ce qu'il y a mieux que de fonctionner comme ça ?

                        -
                        Edité par TheoChesnel 28 décembre 2023 à 11:58:20

                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 décembre 2023 à 13:03:10

                          Pas d'autre solution ?

                          Ben si : tu les mettrais toutes les unes à la suite des autres, ca marcherait pareil:

                          from tkinter import messagebox
                          from tkinter import *
                          
                          def hide():
                              label_definition.destroy()
                              frame_debutant_def_variable.destroy()
                          
                          def definition_variable(debutant_page):
                              label_definition = Label(debutant_page, text="Définition d'une variable : ")
                              label_definition.config(font=("Impact", 20), fg="red")
                              frame_debutant_def_variable = Frame(debutant_page)
                              text_def_variable = Text(frame_debutant_def_variable, wrap=WORD, height=6, width=80)
                              text_def_variable.insert(INSERT, "En termes simples, une variable est un conteneur dans lequel tu peux stocker différents types de données,")
                              text_def_variable.insert(INSERT, "comme des nombres, des chaînes de caractères ou même des objets plus complexes. ")
                              text_def_variable.insert(INSERT, "Ces données peuvent ensuite être modifiées, récupérées et utilisées tout au long de ton programme.")
                              text_def_variable.insert(INSERT, "Les variables deviennent vraiment utiles lorsqu’elles sont utilisées pour stocker des valeurs que tu souhaites manipuler ou comparer.")
                              button_hide_def_variable = Button(frame_debutant_def_variable, text="Masquer",relief=GROOVE, activebackground="light blue", command=hide)
                              label_definition.grid()
                              frame_debutant_def_variable.grid()
                              text_def_variable.grid()
                              button_hide_def_variable.grid()
                          
                          def hide_types_variable():
                              label_types_variable.destroy()
                              frame_types_variable.destroy()
                          
                          def types_de_variable(debutant_page):
                              label_types_variable = Label(debutant_page, text="Les différents types de variable :")
                              label_types_variable.config(font=("Impact", 20), fg="red")
                              frame_types_variable = Frame(debutant_page)
                              text_types_variable = Text(frame_types_variable, wrap=WORD, height=4, width=80)
                              text_types_variable.insert(INSERT, "-> bool : booléen (True ou False)\n")
                              text_types_variable.insert(INSERT, "-> int : entier.\n")
                              text_types_variable.insert(INSERT, "-> float : nombre flottant qui a la précision d'un double.\n")
                              text_types_variable.insert(INSERT, "-> str : chaîne de caractère (string).")
                              button_hide_types_variable = Button(frame_types_variable, text="Masquer", relief=GROOVE, command=hide_types_variable)
                           
                              label_types_variable.grid()
                              frame_types_variable.grid()
                              text_types_variable.grid()
                              button_hide_types_variable.grid()
                          
                          def debutant_level():
                          
                              debutant_page = Tk()
                              debutant_page.title("Niveau débutant")
                              debutant_page.geometry("650x400")
                              debutant_page.minsize(650,400)
                              debutant_page.maxsize(650,400)
                           
                              menu_2 =Menu(debutant_page)
                           
                              menu_variable =Menu(menu_2, tearoff=0)
                              menu_affichage =Menu(menu_2, tearoff=0)
                              menu_boucles =Menu(menu_2, tearoff=0)
                              menu_fonction =Menu(menu_2, tearoff=0)
                           
                              menu_2.add_cascade(label="Les variables", menu=menu_variable)
                              menu_2.add_cascade(label="Affichage", menu=menu_affichage)
                              menu_2.add_cascade(label="Les boucles", menu=menu_boucles)
                              menu_2.add_cascade(label="Les fonctions", menu=menu_fonction)
                          
                              menu_variable.add_command(label="1-Définition", command= lambda: definition_variable(debutant_page))
                              menu_variable.add_command(label="2-Types de variables", command= lambda : types_de_variable(debutant_page))
                              menu_variable.add_command(label="3-Opérations")
                              menu_variable.add_command(label="4-Conclusion")
                              debutant_page.config(menu=menu_2)
                           
                          def intermediaire_level():
                              intermediaire_level = Tk()
                              intermediaire_level.title("Niveau intermédiaire")
                              intermediaire_level.geometry("410x400")
                              intermediaire_level.minsize(410,400)
                              intermediaire_level.maxsize(410,400)
                          
                          def expert_level():
                              expert_level = Tk()
                              expert_level.title("Niveau expert")
                              expert_level.geometry("410x400")
                              expert_level.minsize(410,400)
                              expert_level.maxsize(410,400)
                          
                          def hide_text_a_propos():
                              frame_a_propos.destroy()
                          
                          def a_propos():
                          
                              frame_a_propos = Frame(home)
                              text_a_propos = Text(frame_a_propos, wrap=WORD, height=8, width=50)
                              text_a_propos.insert(INSERT, "Bonour, cette application à été créer dans le but de vous aprendre le language")
                              text_a_propos.insert(INSERT, " de programation python. Je vous propose des cours, exercices, projets ...\n")
                              text_a_propos.insert(INSERT, "Ce projet a été réaliser par une seule personne. Si il y a des bugs, ou autre, merci de vous nous en informer dans l'onglet aide et la catégorie aide.")
                              bouton_a_propos_hide = Button(frame_a_propos, text="Masquer", command=hide_text_a_propos)
                              text_a_propos.config(state=DISABLED)
                           
                              frame_a_propos.grid()
                              text_a_propos.grid()
                              bouton_a_propos_hide.grid()
                          
                          def version():
                              messagebox.showwarning("Version:","This is the version 1.0.0")
                           
                          def confirm():
                              confirmer = messagebox.askquestion("QUITTER ?","Es tu sur de vouloir quitter ?")
                              if confirmer == 'yes': home.destroy()
                          
                          def hide_text_aide():
                              frame_aide_contact.destroy()
                          
                          def aide_contact():
                          
                              frame_aide_contact = Frame(home)
                              text_aide = Text (frame_aide_contact, wrap=WORD, height=1, width=50)
                              text_aide.insert(INSERT, "exaple_mail@gmail.com")
                              bouton_aide = Button(frame_aide_contact, text="Masquer", command=hide_text_aide)
                              text_aide.config(state=DISABLED)
                           
                              frame_aide_contact.grid()
                              text_aide.grid()
                              bouton_aide.grid()
                          
                          home = Tk()
                          home.title("Learn in python")
                          home.geometry("407x398")
                          home.minsize(407,398)
                          home.maxsize(430,398)
                          
                          menu_1 = Menu(home)
                          menu_cours = Menu(menu_1, tearoff=0)
                          menu_exo = Menu(menu_1, tearoff=0)
                          menu_aide = Menu(menu_1, tearoff=0)
                          menu_quitter = Menu(menu_1, tearoff=0)
                          menu_1.add_cascade(label="Cours", menu=menu_cours)
                          menu_1.add_cascade(label="Exercices", menu=menu_exo)
                          menu_1.add_cascade(label="Aide", menu=menu_aide)
                          menu_1.add_cascade(label="Quitter", menu=menu_quitter)
                          
                          menu_cours.add_command(label="Débutant", command=debutant_level)
                          menu_cours.add_command(label="Intermédiaire", command=intermediaire_level)
                          menu_cours.add_command(label="Expert", command=expert_level)
                          menu_exo.add_command(label="Exercices débutant")
                          menu_exo.add_command(label="Exercices intérmediaire")
                          menu_exo.add_command(label="Exercices expert")
                          menu_exo.add_command(label="Projets réalisable")
                          menu_aide.add_command(label="Versions", command=version)
                          menu_quitter.add_command(label="Quitter", command=confirm)
                          home.config(menu=menu_1)
                          
                          home.mainloop()
                          



                          -
                          Edité par Phil_1857 28 décembre 2023 à 13:15:48

                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 décembre 2023 à 13:14:51

                            Très bien, un grand merci à tous ceux qui m'ont aider. Vous me permettez de pouvoir continuer mon programme.

                            Je vous souhaite une excellente journée et des très belles fêtes de fin d'année :D

                            • Partager sur Facebook
                            • Partager sur Twitter
                              28 décembre 2023 à 13:56:12

                              Regarde quand même le code que j'ai affiché, avec les trucs dans l'ordre:

                              1_ les 2 imports utiles

                              2_ toutes les fonctions les unes à la suite des autres

                              3_ le programme principal avec la définition de la fenêtre home 

                              -
                              Edité par Phil_1857 28 décembre 2023 à 13:57:21

                              • Partager sur Facebook
                              • Partager sur Twitter
                                28 décembre 2023 à 14:02:31

                                Ton programme fonction presque sans faille. Il y a juste le bouton masquer qui ne fonctionne pas. Il y a aussi des messages d'erreur  :

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  28 décembre 2023 à 17:03:15

                                  TheoChesnel a écrit:

                                  Ton programme fonction presque sans faille. Il y a juste le bouton masquer qui ne fonctionne pas. Il y a aussi des messages d'erreur  :

                                  Normal, les fonctions emboîtées définissent des espaces de nommages particuliers qui permettent de se passer de variables globales. Du coup:

                                  def hide():
                                      label_definition.destroy()
                                      frame_debutant_def_variable.destroy()
                                   
                                  def definition_variable(debutant_page):
                                      label_definition = Label(debutant_page, text="Définition d'une variable : ")
                                  

                                  ne marche pas. Alors que la mouture emboîtée:

                                   
                                  def definition_variable(debutant_page):
                                      def hide():
                                          label_definition.destroy()
                                          frame_debutant_def_variable.destroy()
                                  
                                      label_definition = Label(debutant_page, text="Définition d'une variable : ")
                                      ...

                                  fonctionne très bien.

                                  Et je répète: plutôt que d'appliquer sans trop comprendre ce qu'on vous raconte, réfléchissez un peu...



                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  "Erreur de code"

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  • Editeur
                                  • Markdown