Partage
  • Partager sur Facebook
  • Partager sur Twitter

return value button with tkinter

    12 octobre 2021 à 13:19:51

    Bonjour à tous !

    Cela fait plusieurs semaines que je suis sur un projet qui permet d'accéder à ma base de données en n'affichant pas mon identifiant et mot de passe en clair.

    Je n'arrive pas à retourner le lien de ma base pour y accéder et ainsi l'utiliser pour d'autre fonctions:

    import pymongo
    from tkinter import *
    from tkinter.messagebox import *
    import hashlib
    
    def connexion():
       #Création d'une interface graphique principal
        fenetre_connexion = Tk()
        fenetre_connexion.title("Connexion")
    
        #Création de l'entree 
        identifiant = IntVar()
        entry_identifiant = Entry(fenetre_connexion, textvariable= identifiant, show='')
        entry_identifiant.pack(side=LEFT, padx=2, pady=2)
    
        mot_de_passe = IntVar()
        entry_mdp = Entry(fenetre_connexion, textvariable= mot_de_passe, show='*')
        entry_mdp.pack(side=LEFT, padx=2, pady=2)
        
        def co():
            #Hashage de l'indentifiant et du mot de passe en sha1
            identifiant = hashlib.sha1(entry_identifiant.get().encode()).hexdigest()
            mot_de_passe = hashlib.sha1(entry_mdp.get().encode()).hexdigest()
    
            #Si l'identifiant et le mot de passe correspondent en sha1, on se connecte à la base de données et retourne le lien de celle-ci
            if identifiant == "identifiantensha1" and mot_de_passe == "mdpensha1":
                client = pymongo.MongoClient("mongodb+srv://" + entry_identifiant.get() + ":" + entry_mdp.get() + "@xxx")
                if client:
                    showinfo(title="Infos", message="Connexion à la base de donnée réussi")
                    fenetre_connexion.destroy()
                    home()
                    lien = "mongodb+srv://" + entry_identifiant.get() + ":" + entry_mdp.get() + "@xxx"
                    return lien
                else:
                    showerror(title="Error", message="Un erreur est survenu lors de la connexion")
                    fenetre_connexion.destroy()
            else:
                showwarning(title="Warning", message="L'identifiant ou le mot de passe est incorrecte !")
                fenetre_connexion.destroy()
            
        button_connexion = Button(fenetre_connexion, text= 'Connexion', command=co)
        button_connexion.pack(side=LEFT, padx=5, pady=5)
        return co


    J'ai penser à une fonction async pour co() mais sa ne fonctionne pas.

    Merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      12 octobre 2021 à 13:26:52

      co est une fonction appelée par tkinter (et non depuis votre code comme les fonctions normales) son retour sera récupéré par tkinter et inaccessible. La seule solution sera de passer par des variables globale (ou des classes)... Et d'apprendre à programmer avec tkinter plutôt que d'essayer de vouloir lui faire faire ce qu'il ne peut pas.

      -
      Edité par mps 12 octobre 2021 à 13:28:27

      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2021 à 18:58:32

        tu as définis tes variables identifiant et mot_de_passe en IntVar(), tu devrais les déclarer en StringVar() à mon avis (ligne 12 16)

        Quoique comme tu les redéfinis ligne 22 et 23 je crois.

        Sinon tu retournes ligne 43 l'adresse de la fonction co et pas le résultat d'un appel à la fonction co() 

        • Partager sur Facebook
        • Partager sur Twitter
          15 octobre 2021 à 8:09:37

          Merci de vos réponses.

          umfred, j'ai définit identifiant et mot_de_passe en IntVar() car c'est des numéros qui vont être dans les entrées.

          mps, je vais essayer de faire ça avec des classes. En revanche pas besoin de critiquer les manières de développer. Je suis en apprentissage et c'est justement parce que je n'arrive pas a faire quelque chose que je viens demander de l'aide. Pas besoin de le rappeler.

          • Partager sur Facebook
          • Partager sur Twitter
            15 octobre 2021 à 9:25:51

            VictorienRodrigues a écrit:

            Je suis en apprentissage et c'est justement parce que je n'arrive pas a faire quelque chose que je viens demander de l'aide. Pas besoin de le rappeler.


            Pour apprendre, il est préférable de faire de petits exercices pour voir comment çà marche. Là vous écrivez un code qui correspond à un petit projet qu'on fait pour montrer qu'on sait mettre en pratique ce qu'on a appris (dans les tutos).

            • Partager sur Facebook
            • Partager sur Twitter
              15 octobre 2021 à 9:57:08

              Très bien, je comprends;

              Mais dans l'avenir, sache le dire différemment, tes messages sont tournés de façon agressives.

              Essaye de dire ce que tu as à dire mais en étant plus courtois à l'avenir.

              Merci encore pour les possibles solutions que tu m'a proposer, je suis actuellement en plein test dessus.

              • Partager sur Facebook
              • Partager sur Twitter

              return value button with tkinter

              × 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