Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fenêtre ne voulant pas se recréer

    28 février 2016 à 13:45:07

    Voilà j'utilise se programme pour gérer des stocks (ici des vélos) avec une interface tkinter, elle fonctionne relativement bien cependant lorsque je souhaite refaire une action (ici la seule possible, ranger un vélo) l'interface ne s'affiche plus jusqu'au bout...

    Mon programme:

    import tkinter as Tk
    from datetime import*
    import os
    from serial import Serial
    from time import*
    
    global listeNom, listeMDP, policeBase
    listeNom=["Marc"]
    listeMDP=["123"]
    policeBase=8
    
    
    #Activation de l'arduino
    serial_port = Serial(port='COM4', baudrate=9600)
    
    def arduinoActive(emplacement):
        #Définir la position de l'emplacement
        ##### A AJOUTER LE COMMUNICATION DE L'ETAGE
        if emplacement%2==0:
            message='AB'+str(emplacement)
        else:
            message='AC'+str(emplacement)
        print(message) 
        serial_port.write(message.encode('ascii'))
        
    def temp():
        filewin=Toplevel(fen1)
        button=Button(filewin,text="Cette fonction n'est pas encore implentée")
        button.pack()
        
    def lireUneLigne(ligneLire,fichierSauvegarde):
        ligne=0
        fichier=open(fichierSauvegarde,'r')
        liste=[]
        for ligne in fichier:
            liste.append(ligne[:-1])
        return liste[ligneLire]
        fichier.close()
    
    def lireUnFichier(fichierUtilisateur):
        i=0
        liste=[]
        dansLeFichier=True
        while dansLeFichier:
            try:
                liste.append(lireUneLigne(i,fichierUtilisateur))
                i+=1
            except:
                dansLeFichier=False
        return liste
    
    def ecrireUnFichier(liste,fichierSauvegarde):
        fichier=open(fichierSauvegarde,'w')
        for obj in liste:
            fichier.write(str(obj)+'\n')
        fichier.close()    
    
    def compteVerif(nomUtilisateur,motDePasse): #Il faut associer les comptes aux mots de passe
        liste=lireUnFichier('fichierUtilisateurs.txt')[:]
    
        #Récupérer de la liste 2 listes: Noms, MDP
        listeNoms=[]
        listeMDP=[]
        for i in range(0,len(liste),2):
            listeNoms.append(liste[i])
            listeMDP.append(liste[i+1])
    
        #vérifier le nom Utilisateur
        if nomUtilisateur in listeNoms:
            Compte=True
            index=listeNoms.index(nomUtilisateur)
            #si il y a utilisateur regarder le mot de passe correspondant et vérifier que celui fournit est le même
            if motDePasse==listeMDP[index]:
                MDP=True
            else:
                MDP=False
        else:
            Compte=False
            MDP=False
    
        return [Compte,MDP]
    
    def creerCompte(nomUtilisateur,motDePasse):
        liste=lireUnFichier('fichierUtilisateurs.txt')[:]
    
        #Si le nom existe déjà renvoyer false
        if nomUtilisateur in liste:
            nomExiste=True
        #Sinon ajouter à la liste (le fichier) le nom puis le mot de passe correspondant
        else:
            liste.append(nomUtilisateur)
            liste.append(motDePasse)
            nomExiste=False
        #réécrire le fichier de sauvegarde
        ecrireUnFichier(liste,'fichierUtilisateurs.txt')
        return nomExiste
    
    def lireFichStock():
        """permet de déchiffrer le fichier stock.txt et renvoi la liste des stocks"""
        liste=lireUnFichier('stock.txt')[:]
        listeStock=[]
        for i in range(0,len(liste)-1,4):
            #liste=[compte, date, emplacement, nettoyage]
            #Decoder le nettoyage à la main (la méthode bool() ne fonctionnant pas)
            if liste[i+3]=='True':
                nettoyage=True
            else:
                nettoyage=False
            #Liste i+1 n'est pas un str mais une date il faudra penser à le changer
            listeStock.append([liste[i],datetime(int(liste[i+1][0:4]),int(liste[i+1][4:6]),int(liste[i+1][6:8])),int(liste[i+2]),nettoyage])
        return listeStock
    
    def sauvegardeStock(listeStock):
        """Permet de modifier le fichier stock.txt et d'y mettre les nouvelles valeurs (priorité donnée à la liste listeStock)"""
        liste=[]
        #Si liste stock n'est pas vide enregistrer directement cette liste
        if listeStock!=[]:
            for i in range(len(listeStock)):
                #liste=[compte, date, emplacement, nettoyage]
                liste.append(listeStock[i][0])
                liste.append(str(listeStock[i][1]).replace('-','')[0:8])
                liste.append(listeStock[i][2])
                liste.append(listeStock[i][3])
            #Une fois la liste créer et que le fichier n'était pas vide recréer un fichier stock avec les modification apportées
            ecrireUnFichier(liste,"stock.txt")
            return True
        else:
            ecrireUnFichier(liste,"stock.txt")
            return False
    
    def lireTempsStockage(dateFich):
        today=datetime.now()
        ###date=datetime(int(dateFich[:4]),int(dateFich[4:6]),int(dateFich[6:]))
    
        #Compare la date donnée avec celle d'aujourd'hui
        temps=int((today-dateFich).days)
    
        return temps
    
        
    ###INUTILE !!!
    """
    def securite():
        admin=['Marc','Vincent']
        securite=True
        
        while securite:
            compte=str(input("Nom Utilisateur : "))
            MDP=str(input("Mot de Passe : "))
            compteExiste=compteVerif(compte,MDP)[:]
    
            #Si le compte n'existe pas demander si on veut en créer un
            if not compteExiste[0]:
                demandeCreerCompte=input("\nVous n'avez pas de compte voulez vous en créer un ?\n")
    
                #Si oui créer un compte
                if demandeCreerCompte in oui:
                    print("\n\n--------------------------------\nInitiation de la création d'un compte:")
                    nomExiste=True
                    while nomExiste:
                        compteCreation=str(input("|    Nom Utilisateur : "))
                        MDPCreation=str(input("|    Mot de Passe : "))
                        nomExiste=creerCompte(compteCreation,MDPCreation)
    
                        #Si le nom existe déjà proposer d'annulé la création et sinon redémarrer le processus
                        if nomExiste:
                            print("Ce nom d'utilisateur est déjà pris veuillez entrer un autre nom utilisateur.\nVoulez vous continuer ?")
                            continuer=input()
                            if continuer not in oui:
                                nomExiste=False
                                print("    ----------------    \n|    Annulation de la création d'un compte    |\n--------------------------------\n\n")
                        else:
                            print("    ----------------    \n|    Votre compte a bien été créer",compteCreation,".    |\n--------------------------------\n\n")
                    securite=True
                    
            #Si le mot de passe n'est pas correct l'indiquer à l'utilisateur
            elif not compteExiste[1]:
                print("\nLe mot de passe est eronné, veuillez réessayer.\n")
                securite=True
    
            #Si le compte existe
            elif compteExiste[0] and compteExiste[1]:
                securite=False
                print("\nVotre compte existe vous allez être rediriger vers le menu d'actions")
    
            #Mise en forme
            print("\n\n------------------------------------------------------")
    
        if compte in admin:
            admin=True
        else:
            admin=False
    
        return admin
    """
                
    def wait():
        input("-/-Tapez sur *Entrer* pour continuer-\-")
        
    def logDev():
        global nom, passe
        nom="Marc"
        passe="123"
    
        menu()
        
    def log():
        global nom, passe
        verifNom=False
        verifMDP=False
        
        nom=str(entryNU.get())
        passe=str(entryMP.get())
    
        entryNU.delete(0,Tk.END)
        entryMP.delete(0,Tk.END)
    
        if nom in listeNom:
            verifNom=True
        else:
            nom='µ'
    
        if passe in listeMDP:
            verifMDP=True
        else:
            passe='µ'
    
        if verifNom and verifMDP:
            menu()
    
    def menu():
        global fen2, xDiaBox, yDiaBox, DiaBox, largeurFen2, hauteurFen2
        xFen=20
        yFen=50
        buttLarg=50
        buttHaut=1
        esp=50
        
        fen2=Tk.Toplevel()
        fen2.title("Menu")
        
        largeurFen2=fen2.winfo_screenwidth()-100
        hauteurFen2=fen2.winfo_screenheight()-100
        
        fen2.geometry(str(largeur)+"x"+str(hauteur)+"+0+0")
    
        lab1=Tk.Label(fen2,text="Quel action souhaitez vous faire ?",font=("Helvetica",policeBase+8,"bold"))
        lab1.place(x=xFen,y=yFen-30)
    
        bou1=Tk.Button(fen2,text="   Renter un Vélo    ",font=("Helvetica",policeBase+4),width=buttLarg,height=buttHaut,command=nettoyage)
        bou1.place(x=xFen,y=yFen)
    
        bou2=Tk.Button(fen2,text="   Récupérer un Vélo    ",font=("Helvetica",policeBase+4),width=buttLarg,height=buttHaut)
        bou2.place(x=xFen,y=yFen+esp)
    
        bou3=Tk.Button(fen2,text="   Voir les Infos sur mon compte ",font=("Helvetica",policeBase+4),width=buttLarg,height=buttHaut)
        bou3.place(x=xFen,y=yFen+2*esp)
    
        bou4=Tk.Button(fen2,text="Se déconnecter",font=("Helvetica",policeBase+4),command=fen2.destroy)
        bou4.place(x=largeur-150,y=hauteur-100)
        
        fen2.mainloop()
    
    def nettoyage():
        global net, netQO, netQN, netVa
    
        xFen=largeurFen2//2
        yFen=50
        net=Tk.Label(fen2,text="Voulez vous un nettoyage ?",font=("Helvetica",policeBase+4,"bold"))
        netQO=Tk.Checkbutton(fen2,text="Oui",command=lambda:choixNettoyage("oui"))
        netQN=Tk.Checkbutton(fen2,text="Non",command=lambda:choixNettoyage("non"))
        netVa=Tk.Button(fen2,text="Valider",command=recupererVelo)
    
        net.place(x=xFen,y=yFen-30)
        netQO.place(x=xFen+20,y=yFen)
        netQN.place(x=xFen+70,y=yFen)
        netVa.place(x=xFen+120,y=yFen)
    
    def choixNettoyage(choix):
        global nettoyage
        
        if choix=="oui":
            netQN.deselect()
            nettoyage=True
        else:
            netQO.deselect()
            nettoyage=False
    
    def recupererVelo():
        xFen=largeurFen2//2
        yFen=50
        
        liste=lireFichStock()[:]
        listePlace=[]
    
        netQO.destroy()
        netQN.destroy()
        netVa.destroy()
        
        #chercher un emplacement libre
        i=0
        for j in range(len(liste)):
            listePlace.append(liste[j][2])
        if listePlace!=[]:
            while i in listePlace:
                i+=1
            emplacement=i
        else:
            emplacement=0
    
        ##Vérifier que le parking ai bien assez de place pour stocker le vélo
        if emplacement in range(0,nbreDePlace):
            #récupérer la date
            date=datetime.now()
    
            #communiquer à l'arduino qu'il doit ranger le vélo
            arduinoActive(emplacement)
    
            #ajouter a la listeStock le vélo
            liste.append([nom,date,emplacement,nettoyage])
    
            #EnregeistsauvegardeStockrer les stocks
            sauvegardeStock(liste)
    
            #Annoncer le bon déroulement de l'enregistrement
            rep1=Tk.Label(fen2,font=("Helvetica",policeBase+2),text="Un emplacement a été trouvé. Votre vélo sera stocké à l'emplacement n°"+str(emplacement)+".")
        else:
            rep1=Tk.Label(fen2,font=("Helvetica",policeBase+2),text="-STOCKAGE-\nIl n'y a plus d'emplacement, votre vélo ne peut être stocker. Veuillez nous excuser de la gène occasionnée.")
    
        rep1.place(x=xFen,y=yFen)
    
    
    global nbreDePlace
    nbreDePlace=9
    
    Utilisateur="µ"
    MDP="µ"
    
    fen1=Tk.Tk()
    fen1.title("Login")
    
    largeur=fen1.winfo_screenwidth()-100
    hauteur=fen1.winfo_screenheight()-100
    fen1.geometry(str(largeur)+"x"+str(hauteur)+"+0+0")
    
    labelNU=Tk.Label(fen1,font=("Helvetica",policeBase+2,"bold"),text="Nom Utilisateur")
    labelNU.place(x=(largeur//2)-120,y=(hauteur//2)-60)
    
    entryNU=Tk.Entry(fen1,font=("Helvetica",policeBase+2))
    entryNU.place(x=(largeur//2)+20,y=(hauteur//2)-60)
    
    labelMP=Tk.Label(fen1,font=("Helvetica",policeBase+2,"bold"),text="Mot de Passe")
    labelMP.place(x=(largeur//2)-120,y=(hauteur//2)-30)
    
    entryMP=Tk.Entry(fen1,show="*",font=("Helvetica",policeBase+2))
    entryMP.place(x=(largeur//2)+20,y=(hauteur//2)-30)
    
    bouLog=Tk.Button(fen1,text="Login",command=log)
    bouLog.place(x=(largeur//2)-30,y=(hauteur//2)+100)
    
    bouLog1=Tk.Button(fen1,text="DevBut",command=logDev)
    bouLog1.place(x=(largeur//2)-30,y=(hauteur//2)+150)
    
    if MDP!="µ" and Utilisateur!="µ":
        menu=Tk.Toplevel(fen1)
        menu.geometry(str(largeur)+"x"+str(hauteur)+"+0+0")
    
    fen1.mainloop()
    



    • Partager sur Facebook
    • Partager sur Twitter
      29 février 2016 à 0:20:21

      je ne suis pas un robot

      • Partager sur Facebook
      • Partager sur Twitter
      GitHub - Chaine youtube | +1 est sympa sur OC & une ★ sur github :D | Australia-QWERTY-no accent

      Fenêtre ne voulant pas se recréer

      × 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