Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 17/05/2015, à 18:52

PythonRoyal

Tkinter Python (ISN)

Bonjour, je suis assez pressé, je dois rendre mon projet Vendredi mais j'ai un problème au niveau des fonctions.. Mon programme d'ISN est de réalisé un menu sous Tkinter en gros. Je suis censé simulé l'arrivé d'une trame et afficher une image en fonction de celà.
Mon programme seul marche trés bien :

from tkinter import *
from tkinter.messagebox import * # boîte de dialogue

#________________________ FONCTION ____________________________


def Verification():
    print(Motdepasse.get()) #Mouchard
    TRAME=Motdepasse.get() #Definition de variable pour utiliser [0] liste.
    if TRAME[0] == '@': #Si le caractere 0 ...
        showinfo('Résultat','STX vérifié\n')
    else:
        showinfo("Resultat","STX invalide, veuillez recommencer\n")
        Motdepasse.set('') #Nettoye les caracteres precedemment tapés.
        
    if TRAME[8]=="+": #Si le caractere 8...
        showinfo("Resultat","EOT vérifié")
    else:
        showinfo("Resultat","EOT invalide, veuillez recommencer\n")
        Motdepasse.set('') #Nettoye les caracteres precedemment tapés.
    if TRAME[6]=="7": #Si le caractere 6...
        showinfo("Resultat","CSC MSB vérifié\n")
        if TRAME[7]=="0":  #Si le caractere 7..
            showinfo("Resultat","CSC LSB vérifié\n") 
        else:
            showinfo("Resultat","Pertubations dues à d'autres emissions\n")
            Motdepasse.set('') #Nettoye les caracteres precedemment tapés.
        

    if TRAME =="@0000070+":  #@0000070+ signifie que la boite aux lettres est vide.
        fenetretrame.destroy() #Fermeture de la fenetre de saisie.
        import BOITEVIDE #Importation du programme BOITEVIDE.py
        
        
    

    if TRAME =="@1100070+": #@1100070+ signifie que la boite aux lettres a un colis et une lettre au moins.
        fenetretrame.destroy() #fermeture de la fenetre de saisie.
        import LETTRECOLIS #Importation du programme LETTRECOLIS.py
        
        

    if TRAME =="@1000070+": #@1000070+ signifie que la boite aux lettres à une lettre
        fenetretrame.destroy() #fermeture de la fenetre de saisie.
        import LETTRE #Importation du programme LETTRE.py
        
        

    if TRAME =="@0100070+": #@0100070+ signifie que la boite aux lettres à un colis.
        fenetretrame.destroy() #fermeture de la fenetre de saisie.
        import COLIS  #Importation du programme COLIS.py
        
        
#_________________________________ FENETRE PRINCIPALE __________________      
    
# Création de la fenêtre principale 
fenetretrame = Tk()
fenetretrame.title('Trame reçue') #Titre de la fenetre


# Création d'un widget Label (texte 'Mot de passe')
Label1 = Label(fenetretrame, text = 'Trame reçue ')
Label1.pack(side = LEFT, padx = 5, pady = 5)

# Création d'un widget Entry (champ de saisie)
Motdepasse= StringVar()
Champ = Entry(fenetretrame, textvariable= Motdepasse, bg ='bisque', fg='maroon')
Champ.focus_set()
Champ.pack(side = LEFT, padx = 5, pady = 5)

# Création d'un widget Button (bouton Valider)
Bouton = Button(fenetretrame, text ='Valider', command = Verification)  #L'appuie sur le bouton active la fonction "verification"
Bouton.pack(side = LEFT, padx = 5, pady = 5)

fenetretrame.mainloop()

néanmoins des que je fais appel de ce programme depuis un autre programme, tout ce que je peux ecrire dans mon champ de saisie n'est pas reconnu, comme si j'ecrivais rien. Même à l'aide d'un mouchard ( PRINT ) rien ne s'affiche.

def TRAME():
    import TRAMEMDP
    






def RAPPEL():

# Création de la fenêtre principale
    fenetrerappel = Tk()
    fenetrerappel.title('Rappel')
    fenetrerappel['bg']='bisque' # couleur de fond
    Button(fenetrerappel,text="Consulter l'etat de la Boite aux lettres",command=TRAME).pack(padx=10,pady=10)
    

# création d'un widget Frame dans la fenêtre principale
    Rappel1 = Frame(fenetrerappel,borderwidth=2,relief=GROOVE)
    Rappel1.pack(side=LEFT,padx=10,pady=10)

    # création d'un second widget Frame dans la fenêtre principale
    Rappel2 = Frame(fenetrerappel,borderwidth=2,relief=GROOVE)
    Rappel2.pack(side=LEFT,padx=10,pady=10)

# création d'un widget Frame dans un autre widget Frame
# le parent du widget Frame1 est le widget fenetrerappel (fenêtre principale)
    Rappel3 = Frame(Rappel1,bg="white",borderwidth=2,relief=GROOVE)
    Rappel3.pack(side=LEFT,padx=10,pady=10)

# création d'un widget Label et d'un widget Button dans un widget Frame
    Label(Rappel1,text="Absence de courrier , Mardi 12h").pack(padx=10,pady=10)
    Button(Rappel1,text="Effacer",fg='navy',command=Rappel1.destroy).pack(padx=10,pady=10)

    Label(Rappel2,text="Absence de courrier, Mardi 18h").pack(padx=10,pady=10)
    Button(Rappel2,text="Effacer",fg='navy',command=Rappel2.destroy).pack(padx=10,pady=10)

    Label(Rappel3,text="Présence de courrier Lundi 18h").pack(padx=10,pady=10)
    Button(Rappel3,text="Effacer",fg='navy',command=Rappel3.destroy).pack(padx=10,pady=10)

    
    
    fenetrerappel.mainloop()



LE code d'erreur etant le suivant :

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__
    return self.func(*args)
  File "E:\ISN FINAL\TRAMEMDP.py", line 11, in Verification
    if TRAME[0] == '@': #Si le caractere 0 ...
IndexError: string index out of range

J'ai vraiment besoin de votre aide smile
Merci smile

Hors ligne

#2 Le 17/05/2015, à 19:37

pingouinux

Re : Tkinter Python (ISN)

Bonsoir,
J'obtiens ton message d'erreur quand je valide une chaîne nulle dans la fenêtre. Il semble que la chaîne doive contenir au moins 9 caractères.

Hors ligne