Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème de disposition

Sujet résolu
    12 mai 2021 à 16:43:36

    bonjour à tous,

    voila mon problème mon groupe et moi même avons fait un programme python qui permet de crypter un fichier texte, rien de bien méchant, juste une fonction XOR. mais voila quand je lance mon script il m'indique une erreur de type tclerror, j'ai cherché sur internet et rien trouvé.

    voici mon code, l'erreur est ligne 54 :

    #impotation des modules nécessaire
    from tkinter import filedialog
    from tkinter import *
    from hashlib import sha256
    import os
    from functools import partial
    #fenetre en tk
    fenetre = Tk()
    fenetre.title("choisir un fichier")
    fenetre.config(bg = "#03224c")
    fenetre.geometry("1600x900")
    fenetre.iconbitmap("locked.ico")
    
    
    def selectionFichier():
        fenetre.filename =  filedialog.askopenfilename(initialdir = "/",title = "Selectionner un fichier",filetypes = (("text files","*.txt"),("all files","*.*")))
        print (fenetre.filename)
        return fenetre.filename
    
    def Sortie():
        sortie = filedialog.asksaveasfilename(defaultextension=".txt")
        return sortie
    
    #module de cryptage 
    def cryptage(entree, sortie, key):
        keys = sha256(key.encode('utf-8')).digest()
        with open(entree, 'rb') as bis_entree:
            with open(sortie, 'wb') as sortie_crypt:
                i=0
                while bis_entree.peek():
                    translate = ord(bis_entree.read(1))
                    count = i % len(keys)
                    crypt = bytes([translate^keys[count]])
                    sortie_crypt.write(crypt)
                    i = i + 1
        os.remove(entree)
    
    
    def Page1():
        def valider1(entre):
            bouton02.destroy()
            bouton01.destroy()
            bouton03.destroy()
            Page1bis(entre)
        bouton01 = Button (fenetre, text = "Veuillez choisir un fichier texte a crypter", command= selectionFichier)
        bouton01.place(relx=0.3, rely=0.5, anchor=CENTER)
        bouton02 = Button (fenetre, text = "Veuillez choisir un fichier texte a décrypter", command= selectionFichier)
        bouton02.place(relx=0.6, rely=0.5, anchor=CENTER)
        if bouton01 != "":
            entree = bouton01
        else:
            entree = bouton02
        bouton03 = Button (fenetre, text = "valider", command = partial(valider1, entree ))
        bouton03.place(fenetre, rely= 0.7 ,relx =0.4)
    
    def Page1bis(entre):
        def valider1bis(entre, sortie):
            enregisterSous.destroy()
            bouton03.destroy()
            Page2(entre, sortie)
        enregisterSous = Button(fenetre, text="enregister sous", command= Sortie)
        enregisterSous.place(fenetre, relx=0.45 ,rely=0.5,anchor= CENTER)
        bouton03 = Button (fenetre, text = "valider", command = partial(valider1bis, entre, enregisterSous))
        bouton03.place(fenetre, rely=0.7 ,relx=0.45 , anchor= CENTER)
    
    
    def Page2(entre, sortie):
        def Valider2(entre, sortie, cle):
            cle.destroy()
            indication.destroy()
            Valider.destroy()
            Page3(entre, sortie, cle)
        cle = Entry(fenetre)
        cle.place(fenetre, relx=0.5, rely=0.5)
        indication = Label(fenetre, text="créez/entrez la clé :")
        indication.place(fenetre, relx=0.5, rely=0.4, anchor= CENTER)
        Valider = Button(fenetre, text="Valider", command=partial(Valider2, entre, sortie, cle))
        Valider.place(fenetre, relx=0.45 , rely=0.7)
    
    def Page3(entre, sortie, cle):
        cryptage(entre, sortie, cle)
        Label1 = Label(fenetre, text="votre fichier originel est ici :" + entre)
        Label1.place(fenetre, relx=0.4 ,rely=0.2, anchor=CENTER)
        Label2 = Label(fenetre, text="votre fichier crypter est ici :" + sortie)
        Label2.place(fenetre, relx=0.4 ,rely=0.3, anchor=CENTER)
        Label3 = Label(fenetre, text="votre clé secret est : " + cle)
        Label3.place(fenetre, relx=0.4 ,rely=0.4, anchor=CENTER)
        Label4 = Label(fenetre, text= "attention votre fichier originel va être détruit par mesure de sécurité, de plus si vous oubliez la clé votre fichier sera perdu.")
        Label4.place(fenetre, relx=0.4 ,rely=0.5, anchor=CENTER)
    Page1()
    fenetre.mainloop()


    donc si quelqu'un peut m'aider à résoudre cette erreur. 

    PS : je suis jeune développeur donc merci d'être indulgent envers mon code et sa structure merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      12 mai 2021 à 17:11:18

      peut-être en recopiant le traceback (message d'erreur) entier (avec ligne et tout), ça pourra aider

      a priori, je dirais qu'il est inutile de remettre la fenetre parente dans les paramètres de la fonction place (donc retirer fenetre des paramètres), le faire également aux autres appels de place()

      https://www.tutorialspoint.com/python/tk_place.htm 

      • Partager sur Facebook
      • Partager sur Twitter
        12 mai 2021 à 22:10:31

        salut merci bcp, maintenant tout fonctionne pour l'interface.

        voici le code corrigé :

        #impotation des modules nécessaire
        from tkinter import filedialog
        from tkinter import *
        from hashlib import sha256
        import os
        from functools import partial
        #fenetre en tk
        fenetre = Tk()
        fenetre.title("choisir un fichier")
        fenetre.config(bg = "#03224c")
        fenetre.geometry("1600x900")
        fenetre.iconbitmap("locked.ico")
        
        
        def selectionFichier():
            fenetre.filename =  filedialog.askopenfilename(initialdir = "/",title = "Selectionner un fichier",filetypes = (("text files","*.txt"),("all files","*.*")))
            return fenetre.filename
        
        def Sortie():
            sortie = filedialog.asksaveasfilename(defaultextension=".txt")
            return sortie
        
        #module de cryptage 
        def cryptage(entree, sortie, key):
            keys = sha256(key.encode('utf-8')).digest()
            with open(entree, 'rb') as bis_entree:
                with open(sortie, 'wb') as sortie_crypt:
                    i=0
                    while bis_entree.peek():
                        translate = ord(bis_entree.read(1))
                        count = i % len(keys)
                        crypt = bytes([translate^keys[count]])
                        sortie_crypt.write(crypt)
                        i = i + 1
            os.remove(entree)
        
        
        def Page1():
            def valider1(entree):
                bouton02.destroy()
                bouton01.destroy()
                bouton03.destroy()
                Page1bis(entree)
            bouton01 = Button (fenetre, text = "Veuillez choisir un fichier texte a crypter", command= selectionFichier)
            bouton01.place(relx=0.3, rely=0.5, anchor=CENTER)
            bouton02 = Button (fenetre, text = "Veuillez choisir un fichier texte a décrypter", command= selectionFichier)
            bouton02.place(relx=0.6, rely=0.5, anchor=CENTER)
            if bouton01 != "":
                entree = bouton01
            else:
                entree = bouton02
            bouton03 = Button (fenetre, text = "valider", command = partial(valider1, entree ))
            bouton03.place(relx= 0.4 ,rely =0.7)
            print(entree)
        
        def Page1bis(entree):
            def valider1bis(entree, sortie):
                enregisterSous.destroy()
                bouton03.destroy()
                Page2(entree, sortie)
            enregisterSous = Button(fenetre, text="enregister sous", command= Sortie)
            enregisterSous.place(relx=0.45 ,rely=0.5,anchor= CENTER)
            sortie = enregisterSous
            bouton03 = Button (fenetre, text = "valider", command = partial(valider1bis, entree, sortie))
            bouton03.place(relx=0.4 ,rely=0.7 , anchor= CENTER)
            print(entree ,sortie)
        
        def Page2(entree, sortie):
            def Valider2(entree, sortie, cle):
                cle.destroy()
                indication.destroy()
                Valider.destroy()
                Page3(entree, sortie, cle)
            cle = Entry(fenetre)
            cle.place(relx=0.5, rely=0.5)
            key = str(cle.get())
            indication = Label(fenetre, text="créez/entrez la clé :")
            indication.place(relx=0.5, rely=0.4, anchor= CENTER)
            Valider = Button(fenetre, text="Valider", command=partial(Valider2, entree, sortie, key))
            Valider.place(relx=0.45 , rely=0.7)
            print(entree, sortie, key)
        
        def Page3(entree, sortie, cle):
            cryptage(entree, sortie, cle)
            Label1 = Label(fenetre, text="votre fichier originel est ici :" + entree)
            Label1.place(relx=0.4 ,rely=0.2, anchor=CENTER)
            Label2 = Label(fenetre, text="votre fichier crypter est ici :" + sortie)
            Label2.place(relx=0.4 ,rely=0.3, anchor=CENTER)
            Label3 = Label(fenetre, text="votre clé secret est : " + cle)
            Label3.place(relx=0.4 ,rely=0.4, anchor=CENTER)
            Label4 = Label(fenetre, text= "attention votre fichier originel va être détruit par mesure de sécurité, de plus si vous oubliez la clé votre fichier sera perdu.")
            Label4.place(relx=0.4 ,rely=0.5, anchor=CENTER)
        Page1()
        fenetre.mainloop()



        mais la il y a d'autre problème.

        voila j'utilise des bouton pour executer des fonctions et pour vérifier si le résultat est bon je fait print() avec le nom de ma variable, par exemple dans mon code dans la fonction page1 j'appelle avec un bouton le fonction selectionfichier et à la fin de ma fonction page1 je mets print avec mon bouton pour voir si la valeur correspond et enfaite non ça m'affiche dans ma console .!buton,j'y comprends rien, est ce que vous pouvez m'aider s'il vous plait

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 mai 2021 à 8:19:59

          Salut,

          Il faudrait déjà savoir quelle variable ou valeur tu veux "printer", car là tu "print" un objet tkinter.Button donc c'est normal...

          Et du coup ta condition :

          if bouton01 != "":
                  entree = bouton01
              else:
                  entree = bouton02


          ne veut absolument rien dire.

          En fait, c'est toute la conception qu'il faut revoir....

          -
          Edité par Anonyme 13 mai 2021 à 8:48:42

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2021 à 11:54:39

            ta fonction selectionFichier retourne une valeur, mais l'option command d'un widget n'est pas prévu pour récupérer une variable.
            Il faut revoir la conception
            • Partager sur Facebook
            • Partager sur Twitter

            problème de disposition

            × 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