Echanges autour d'EduPython.
Vous n'êtes pas identifié(e).
Pages : 1
J'ai crée une application à l'aide de " TKINTER " qui marche actuelle bien selon mes faibles connaissances puisque je suis débutant avec le langage PYTHON (version 3.5) sous Windows 10 64 bits.
Voici l'échantillon du code de l'application qui concerne les erreurs d'exception et qui me m’empêche à finaliser la version 1 de cette application que je souhaiterais la développer encore mieux au futur proche.
def message_erreur(): if ent_labo_loc.get()==StringVar: lb_loc_exception['text']='Erreur, veuillez introduire seulement des chiffres' ent_labo_loc.set("") else: lb_loc_exception['text']='' def afficher_resultat_loc(): try : calcul=20*log10(float(ent_labo_loc.get())/float(entree_ref_loc.get())) calcul=round(calcul,3) ent_correction_loc.set(calcul) ent_labo_loc.set("") except : message_erreur() finally : pass
la fonction " afficher_resultat_loc() " est attache au bouton de validation du calcul mathématique., dont voici le code:
#======= bouton de validation de la correction ===== bt_loc_validation=Button(loc, text='Valider', bd=14, relief=RIDGE, font=('arial',16,'bold'), justify='left', command=afficher_resultat_loc) bt_loc_validation.place(x=420,y=460) #affichage d'un message en cas d'erreur exception lb_loc_exception=Label(loc,text='', fg='red', font=('arial',18,'bold'), justify='left', bg='cadet blue' ) lb_loc_exception.place(x=30,y=420)
le texte qui va être intégré dans ce label n'apparait que lorsque utilisateur écrit des caractères et doit impérativement s'effacer quand l'utilise après introduit un nombre décimal
voici l'image de l'apparence de mon application en cas d'erreur:
j’espère que j'ai bien détaillé mon problème
Merci pour l'aide
Dernière modification par atlass218 (2018-08-16 11:01:28)
Hors ligne
Bonjour,
Quelle est votre problème / question du coup ?
VM
Hors ligne
Salut;
Je décrit à nouveau mon problème de façon explicite : c'est que lorsque l'utilisateur écrit une chaine de caractère dans le widget "Entry" qui porte la consigne "introduire la valeur de la DDM lue par l'avion LABO". cela affiche le message d'alerte en rouge au dessous du widgte Entry (par exemple vous avez entre des cataractes et non pas des chiffres, veuillez introduire des nombres décimales). Ensuite une fois il entre un nombre décimal correct il s'affiche le résultat indique dans le bloc du try, et en même temps le message d'alerte doit être efface.
J’espère que mon problème a été bien décrit
Merci pour l'aide
Dernière modification par atlass218 (2018-08-18 10:34:51)
Hors ligne
Bonsoir, le plus simple est de mettre un texte vide dans le label :
lb_loc_exception.config(text="")
VM
Hors ligne
bonjour
j'ai reformule la fonction d'ne autre facon mais toujours je rencontre des problème :
ent_labo_loc_35R=Entry(fen)
ent_ref_loc_35R=Entry(fen)
lb_loc_35R_exception=Label(fen,text="")
def afficher_resultat_loc_35R(): try: calcul_loc_35R=20*log10(float(ent_labo_loc_35R.get())/float(ent_ref_loc_35R.get())) calcul_loc_35R=round(calcul_loc_35R,3) ent_correction_loc_35R.set(calcul_loc_35R) except ValueError: for element in range(float(ent_labo_loc_35R.get()),float(ent_ref_loc_35R.get())): if elemet!=float(): lb_loc_35R_exception.config(text='Erreur, veuillez introduire seulement des chiffres') else: lb_loc_35R_exception.config(text='') finally: pass
pourriez vous m'aide a corrige ce code
merci
Hors ligne
Bonjour, avec le try, vous ne voyez pas où se trouve les erreurs. par exemple le
for element in range(float(ent_labo_loc_35R.get()),float(ent_ref_loc_35R.get())):
Semble impossible, un range se fait sur des valeurs entières. Il y a un elemet au lieu de element .... Bref plein d'erreur que vous ne voyez pas à cause du try.
Je vous conseille quelque chose comme :
def afficher_resultat_loc_35R(): OK = True try: # on teste le calcul calcul_loc_35R=20*log10(float(ent_labo_loc_35R.get())/float(ent_ref_loc_35R.get())) except : OK = False if OK : lb_loc_35R_exception.config(text='') calcul_loc_35R=round(calcul_loc_35R,3) ent_correction_loc_35R.set(calcul_loc_35R) ..... else : lb_loc_35R_exception.config(text='Erreur, veuillez introduire seulement des chiffres') ....
En pratique, on sépare souvent la partie IHM (Interface Homme Machine) de la partie algo, une fonction pour tester que c'est une valeur décimale, une autre qui fait le "vrai" boulot
VM
Hors ligne
bonsoir;
j'ai essaye le code ci-dessus mais ca n'a pas marche . pour cela, j'ai reformule la fonction (afficher_resultat_loc_35R) en introduisant une boucle pour qu'il y ait apparition de message d'erreur tant que les caractères introduit sont invalides
def afficher_resultat_loc_35R(): while True: try: calcul_loc_35R=20*log10(float(ent_labo_loc_35R.get())/float(spin_ref_loc_35R.get())) calcul_loc_35R=round(calcul_loc_35R,3) ent_correction_loc_35R.set(calcul_loc_35R) except : lb_message_error=Label(canvas1_loc_35R, text='vous avez entre des caractères invalides').place(x=80,y=240) else: break
mais une fois que met en action le script, j'ai remarque que l'application se plante comme si la boucle reste infini
merci pour l'aide
Hors ligne
Ben oui, le while True donne une boucle infinie... Quand on valide, il faut exécuter une fois le test. Je ne vois pas l’intérêt de la boucle.
Avec le while, on ne laisse pas le temps à Tkinter de rependre la main.
Hors ligne
bonjour;
au lieu de la boucle, j'ai fait une condition if :
voici un bout de code qui présente un défaut durant l’exécution de l'application
#textvariable pour Label (message d'erreur) loc 35R message_error_loc_35R =StringVar() #creation du label "message d'erreur" lb_loc_35R_message=Label(canvas1_loc_35R, bg='powder blue', fg='red', justify='left', font=('arial',14,'bold'), textvariable=message_error_loc_35R) lb_loc_35R_message.place(x=10,y=120) #pour afficher resultat du calcul ============= def afficher_resultat_loc_35R(): try: #ent_labo_loc_35R.get().replace(',','.') calcul_loc_35R=20*log10(float(ent_labo_loc_35R.get())/float(spin_ref_loc_35R.get())) calcul_loc_35R=round(calcul_loc_35R,2) ent_correction_loc_35R.set(calcul_loc_35R) except : if spin_ref_loc_35R.get()==0: message_error_loc_35R.set("vous avez entre un chiffre nul") elif ent_labo_loc_35R.get()=="" or spin_ref_loc_35R.get()=="": message_error_loc_35R.set("vous avez laise un champs vide") elif ent_labo_loc_35R.get()==str() or spin_ref_loc_35R.get()==str(): message_error_loc_35R.set("vous avez introduit des caracteres")
en testant l'application par : edit with IDLE, ensuite Run
pas d'affichage d'erreur syntaxique, mais l'aaplication ne marche pas convenablement comme je le souhaite
Dernière modification par atlass218 (2018-09-03 15:03:57)
Hors ligne
Salut;
Je décrit à nouveau mon problème de façon explicite : c'est que lorsque l'utilisateur écrit une chaine de caractère dans le widget "Entry" qui porte la consigne "introduire la valeur de la DDM lue par l'avion LABO". cela affiche le message d'alerte en rouge au dessous du widgte Entry (par exemple vous avez entre des cataractes et non pas des chiffres, veuillez introduire des nombres décimales). Ensuite une fois il entre un nombre décimal correct il s'affiche le résultat indique dans le bloc du try, et en même temps le message d'alerte doit être efface.
J’espère que mon problème a été bien décrit
HostGator DreamHost Bluehost
https://nsa39.casimages.com/img/2018/08 … 745940.jpgMerci pour l'aide
votre ptoble besoin de plus de detail
Dernière modification par drak15 (2018-12-31 16:25:25)
Hors ligne
Pages : 1