Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de fonction et de condition

Python3.X tkinter

Sujet résolu
Anonyme
    29 septembre 2012 à 13:01:12

    Bonjour, cela fait 2 jours que je cherche pourquoi j'ai le problème que je vais vous présenter, la solution est peut-être toute bête mais je n'ai aucune idée de ce que ça peut-être.
    J'ai créé un programme avec tkinter qui demande un mot de passe puis permet de cacher/montrer un dossier (pas de façon absolue) sous windows et linux (et essaye sur les autres OS) ou de changer le mot de passe.
    J'ai testé ma fonction qui vérifie le mot de passe dans l'idle python 3.X et elle fonctionne, cette fonction doit retourner 1 ou 0 (j'ai éssayé avec True et False ça ne change naturellement rien), mais quand je teste depuis la partie de mon programme où se situe la fenêtre, c'est comme si la fonction retournait 0 ou False donc j'obtiens "Mot de passe refusé" continuellement.

    J'ai mis beaucoup de commentaires pour me permettre de mieux comprendre mon code ^^ . Le programme n'est pas fini, donc certaines erreurs ne sont pas encore traitées et l'esthétisme aussi :p , j'aimerai régler ce problème d'abord.

    #! /usr/bin/python3.1
    
    from tkinter import *
    
    # Importation des autres partie du programme
    from privsys.montrer_cacher import *
    from privsys.ecriture_lecture import *
    from privsys.hash import *
    
    # Fenetre
    fenetre = Tk()
    fenetre.title("Private ver 3")
    
    # Label
    premierlab = Label(fenetre, text="Mot de passe:")
    premierlab.pack()
    
    # Champ de saisie
    recup_mdp = StringVar()
    champ_de_saisie = Entry(fenetre, textvariable=recup_mdp, show="*", width=30)
    champ_de_saisie.pack()
    
    # Bouton quitter
    bouton_quitter = Button(fenetre, text="Quitter", command=fenetre.quit)
    bouton_quitter.pack(side=RIGHT)
    
    # Récuperation du mot de passe
    mdp_nh = recup_mdp.get()
    
    # Preparation des boutons cacher et montrer
    bouton_cacher = Button(fenetre, text="Cacher", command=cacher)
    bouton_montrer = Button(fenetre, text="Montrer", command=montrer)
    
    # Commande du bouton "Changer"
    def changer():
        ver1 = mdpver1.get()
        ver2 = mdpver1.get()
        if ver1 == ver2:
            i = hashmdp(ver1)
            ecriremdp(i)
            mdpchg = Label(fenetre, text="Mot de passe enregistré")
            mdpchg.pack()
        else:
            erreurmdp = Label(fenetre, text="Mot de passes différents")
            erreurmdp.pack()
    
    # Création des champs de saisie pour le changement de mot de passe, ajout du nouveau label et du bouton "Changer"
    nwmp = Label(fenetre, text="Nouveau mot de passe:")
    mdpver1 = StringVar()
    champ_de_saisie_ver1 = Entry(fenetre, show="*", textvariable=mdpver1, width=30)
    nwmp2 = Label(fenetre, text="Repeter:")
    mdpver2 = StringVar()
    champ_de_saisie_ver2 = Entry(fenetre, show="*", textvariable=mdpver2, width=30)
    btnchg = Button(fenetre, text="Changer", command=changer)
    
    # Création du processus de validation
    def validation():
        autorisation = verification_mdp(mdp_nh)
        if autorisation == 1:
            bouton_cacher.pack(side=RIGHT) # Affichage du bouton cacher
            bouton_montrer.pack(side=LEFT) # Affichage du bouton montrer
            nwmp.pack()
            champ_de_saisie_ver1.pack()
            nwmp2.pack()
            champ_de_saisie_ver2.pack()
            btnchg.pack()
        else:
            labauto = Label(fenetre, text="Mot de passe refusé")
            labauto.pack()
    
    # Bouton valider
    bouton_valider = Button(fenetre, text="Valider", command=validation)
    bouton_valider.pack(side=LEFT)
    
    # Boucle de la fenetre pour l'empecher de se fermer
    fenetre.mainloop()
    
    # Fermeture de la fenetre
    fenetre.destroy()
    


    Maintenant ma librairie hash où ce trouve ma fonction:

    #!/usr/bin/python3.1
    # -*-coding:utf-8 -*
    
    import hashlib
    
    # liremdp est implenté ici pour éviter de compliquer l'importation
    def liremdp():
        with open(".private3.txt", "r") as mdp:
            texte = mdp.read()
        return texte
    
    # hashage de mot de passe
    def hashmdp(mdp_nonhash):
        mdp_nonhash = mdp_nonhash.encode()
        mdp_hash = hashlib.sha1(mdp_nonhash)
        mdp_hash = mdp_hash.hexdigest()
        return(mdp_hash)
    
    # comparaison du mot de passe
    def verification_mdp(mdp_nonhash):
        mdp_nonhash = mdp_nonhash.encode()
        mdp_hash = hashlib.sha1(mdp_nonhash)
        mdp_hash = mdp_hash.hexdigest()
        mdp_enregistre = liremdp()
        if mdp_enregistre == mdp_hash:
            resultat = 1
            return resultat
        else:
            resultat = 0
            return resultat
    


    Un screen de l'IDLE sur ma fonction (je cache pas le mot de passe, il ne sert qu'à tester ;) ):
    Image utilisateur


    Alors, ne sachant quoi faire, je viens vous demander d'éclairer ma lanterne si vous le voulez bien :D .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      4 octobre 2012 à 8:58:11

      Finalement je n'avais pas besoin d'aide, j'ai juste besoin comme je l'ai déjà dit sur ce forum, de m'acheter des yeux.

      Mon erreur était d'avoir mis tout seul ça :

      27 # Récuperation du mot de passe
      28 mdp_nh = recup_mdp.get()

      Alors qu'il fallait le mettre dans la fonction validation car il recuperait la valeur dès le lancement du programme -_-'.
      Je suis vraiment étourdit...
      • Partager sur Facebook
      • Partager sur Twitter

      Problème de fonction et de condition

      × 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