Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème import fichier avec tkinter

Sujet résolu
    12 février 2017 à 19:07:23

    Bonsoir,

    Je suis actuellement en train de développer une interface graphique pour MySQL à l'aide de tkinter. J'ai tenté d'implémenter une fenêtre de récupération du mot de passe en cas d'oubli. En voici le code simplifié au maximum:

    from tkinter import *
    
    from Graphismes.fenetreConnexion import *
    from Graphismes.fermerFenetre import *
    
    
    def fenetreMdpOublie():
    
    	def retour(event=0):
    
    		fermerFenetre(fen)
    		fenetreConnexion() #Cette fonction est censée ré-afficher la fenêtre de connexion mais c'est la que l'erreur est générée
    
    
    	fen=Tk()
    	fen.title("Fenêtre de récupération du mot de passe")
    
    	bou_retour=Button(fen, text="Retour", command=retour)
    	bou_retour.grid(row=0, column=0, padx=5, pady=5)
    
    	fen.mainloop()

    Cette fonction est appelée lorsque l'utilisateur se trouve dans la fenêtre de connexion et clique sur le bouton "Mot de passe oublié".

    J'ai donc inséré dans la fonction "fenetreConnexion" la ligne "from Graphismes.fenetreMdpOublie import *", "Graphismes"
    étant le dossier dans lequel sont situées toutes les fonctions utilisant tkinter. Lors de l'exécution tout se passe bien jusque là.
    Le problème intervient lorsque je propose à l'utilisateur de revenir à la fenêtre de connexion grâce au bouton "retour" (celui présent
    dans la fonction ci-dessous). Lorsque j'exécute le code et que je clique sur le bouton "retour", l'exécution plante et je reçois le
    d'erreur suivant : 

     NameError: name 'fenetreConnexion' is not defined

    J'ai cherché pendant plusieurs jours et j'ai réécris plusieurs fonctions mais je ne parviens pas à régler le problème.

    Si quelqu'un aurait une solution à me proposer, je suis preneur ;) 
    Si vous avez besoin de plus d'info sur le code ou sur la structure du programme, n'hésitez pas à me demander !
    Merci d'avance :)

    • Partager sur Facebook
    • Partager sur Twitter
      12 février 2017 à 19:36:45

      Salut,

      Avez-vous plusieurs fenêtre principale Tkinter? Donc, plusieurs .mainloop(), qui sont des boucles principales.

      Vous devriez utiliser tk.Toplevel(), qui ouvrira une fenêtre secondaire, sans mainloop.

      Si vous ajouter la fenêtre principale en paramètre. Vous pourrez ainsi la réduire, et afficher votre fenêtre secondaire. Lorsque le bouton Return sera exécuté, vous détruisez la fenêtre secondaire et remettez la fenêtre principale en avant-plan.

      Exemple:

      def fenetreMdpOublie(fenetrePrincipale):
          def retour():
              fen.destroy() ## Détruit la fenêtre
      
              ## Remet en avant, la fenêtre principale
              fenetrePrincipale.deiconify() 
      
          fenetrePrincipale.withdraw() ## Réduit la fenêtre principale
      
          fen = Toplevel() ##Fenêtre secondaire
          fen.title("Fenêtre de récupération du mot de passe")
       
          bou_retour=Button(fen, text="Retour", command=retour)
          bou_retour.grid(row=0, column=0, padx=5, pady=5)
      


      Sinon, j'avais déjà répondu à un problème similaire. Si cela peut vous aider.

      Il y a un fichier principale (main.py) et deux fichiers secondaires (voiture.py, maison.py), contenant une classe dans lequel, il y une fenêtre secondaire.

      Voici l'exemple,(vers le milieu de la page)

      Bonne Chance

      A+

      -
      Edité par nolimitech 12 février 2017 à 19:40:18

      • Partager sur Facebook
      • Partager sur Twitter
        12 février 2017 à 20:58:44

        Non je n'ai qu'une seule fenetre principale ouverte à la fois.

        J'ai utilisé la fonction vous avez proposé et cela fonctionne correctement.

        Merci beaucoup :D

        Bonne soirée

        • Partager sur Facebook
        • Partager sur Twitter

        Problème import fichier avec 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