Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1539 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [Novice] De la ldc à Tkinter Problème de fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Novice] De la ldc à Tkinter Problème de fonction

n°2286939
lolight
Posté le 25-08-2016 à 15:28:43  profilanswer
 

Bonjour,  
Je viens ici car ça fais un moment que je bloque.  
J'ai rédigé un programme en python sans Gui qui a pour but de permettre une estimation d'un coût de déplacement.
Il marche bien. Je me suis dis pourquoi pas faire la variante avec une interface graphique j'ai je bloque lors se que je doit lancer une fonction avec plusieurs argument, j'ai pas réussis à comprendre pourquoi ça marchais différents d'ailleurs.
 
Voici le code :  
 
Mon bouton qui doit permettre de lancer ma fonction. (Pas comprise l'utilité du partial et je pense que l'os est la) Et enfin mon label qui est sencé afficher le résultat du calcul.
 

Code :
  1. btttntest = Button (fenetre, text='Test', command=partial(cout_deplacement, kms, consomation, prixdulitre))
  2. def cout_deplacement (kms,consomation,prixdulitre):
  3. resultat = kms * consomation * prixdulitre / 100
  4. labeldd.config(text=resultat)
  5. showinfo("Alerte2", resultat)
  6. return True
  7. labeldd = Label(fenetre, text='--')


 
 
 
Pour comparer dans la version sans Gui, j'avais simplement fais ça :  
 

Code :
  1. print "Cout brut du voyage estimé :", cout_deplacement(kms,consomation,prixdulittre),"€"


 
Je précise que je suis vraiment débutant et que je n'ai pas suivis de formation donc il est possible qui me manque de concepte qui semblerais basique pour certain d'entre vous. Dans tout les cas merci pour votre lecture :)


Message édité par lolight le 25-08-2016 à 15:48:08

---------------
--- Mon topik d'Ach/Ven ---
mood
Publicité
Posté le 25-08-2016 à 15:28:43  profilanswer
 

n°2286947
bistouille
Posté le 25-08-2016 à 19:09:16  profilanswer
 

As-tu importé partial dans ton script ?
 

Code :
  1. from functools import partial


 
Sinon, pas besoin de ça dans ton cas, un petit lambda suffit.
 

Code :
  1. btttntest = Button (fenetre, text='Test', command=lambda k=kms,  c=consomation, p=prixdulitre : cout_deplacement(k, c, p))


 
Bien évidemment les variables kms, consommation, prixdulitre doivent-être définis avant la création du bouton.
 
As-tu utilisé pack ou grid sur ton bouton ?
Car il n'est pas présent dans ton bout de code., et comme tu n'en dis pas plus sur le problème rencontré.
 
 
 
 


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2286953
lolight
Posté le 26-08-2016 à 09:03:58  profilanswer
 

Bonjour Bistouille,  
Merci pour ta réponse  :jap:  
 
Oui j'ai bien importé partial dans mon code, je n'ai pas d'erreur de se côté la, mais du coup si je peux m'en passer, autant que je m'en passe.  :ange:  
 
Pour ce qui est des variables je les ai initialisé à 0 au début de mon programme.
 
J'ai utilisé grid, j'ai juste simplement regroupé tout la gestion de mon interface au même endroit.
Mon problème c'est que je ne sais pas faire l'équivalent graphiquement.  
Ici tu m'as donnée une superbe ligne qui permet à mon bouton de réliser un calcul, mais est-il possible de faire plusieurs calcul dans ce bouton ? Idélement faire les 4 calculs fais dans le code non Gui ?  

Code :
  1. print "Cout brut du voyage estimé :", cout_deplacement(kms,consomation,prixdulittre),"€"
  2. print "Cout estimé du voyage réduction comprise :",cout_total(),"€"
  3. print "Réduction : ", bonus_reduction(reduction,kms), "€"
  4. print "Consomation : ", cout_deplacement(consomation,kms,1),"L"


 
Est-il aussi possible de rajouter une fonction dans mon bouton qui changerais la valeur de plusieurs label afin d'y afficher les résultats ?  
 
Merci beaucoup pour ton aide, je patauge complet.  :pt1cable:  
 
Voici le pastebin du code sans Gui : http://pastebin.com/kjNwkKWh
 
Voici le pastebin du code avec Gui : http://pastebin.com/GLuNNAq6


---------------
--- Mon topik d'Ach/Ven ---
n°2286963
bistouille
Posté le 26-08-2016 à 12:55:38  profilanswer
 

Salut,
 
Premières choses :
- Évite l'utilisation de * dans l'import.
- Aère ton code.
- Utilise les grid à la suite de la création du widget (pas plusieurs lignes plus loin), c'est plus lisible.
 
Tu as créé plein de stringvar, mais tu ne t'en sers pas dans ton code.
 
Maintenant oui, tu peux afficher les résultats dans plusieurs labels, mais pourquoi ne pas utiliser simplement le widget Message pour y afficher comme sur ton programme de base tous les résultats dans une même zone ?
 


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2286980
lolight
Posté le 26-08-2016 à 17:55:14  profilanswer
 

Salut Bistouille  
 
Merci pour tout ces conseils, je vais essayer de les suivre à la lettre !  
 
Pour être franc au début je mettais les grid directement après et j'avais vu un dev qui les packais un peut comme j'ai fais, j'ai pensé que c'étais plus optimisé mais du coup je vais les remetre à leurs place  :pt1cable:  
 
Je n'ai pas bien compris à quoi ça servais dans la mini doc que j'avais il le mettais, un peut comme le value.set d'ailleurs.
Je vais creuser ça du coup :)
 
Je ne connaissais pas l’existence de ce Widget, du coup j'ai pas mal de doc à lire.
Je ferais un retour ici avec les modification apporté et les feedback, m'enfin tu ma donné pas mal de piste je vais creuser tout ça.
 
Un grand merci à toi d'avoir pris le temps de m'aider autant.
 
Bon week-end   :jap:


---------------
--- Mon topik d'Ach/Ven ---
n°2286981
bistouille
Posté le 26-08-2016 à 19:03:04  profilanswer
 

lolight a écrit :

Pour être franc au début je mettais les grid directement après et j'avais vu un dev qui les packais un peut comme j'ai fais, j'ai pensé que c'étais plus optimisé mais du coup je vais les remetre à leurs place  :pt1cable:

 

En fait tu fais comme tu le sens, si tu préfères grouper les grid, c'est un choix indiscutable  :D
Pour ma part, je préfère le faire à la suite du widget créé, au moins pas besoin de revenir en arrière dans le code.

 
lolight a écrit :

Je n'ai pas bien compris à quoi ça servais dans la mini doc que j'avais il le mettais, un peut comme le value.set d'ailleurs.
Je vais creuser ça du coup :)

 

Une doc dispo en pdf sur ce site concernant tkinter.
http://infohost.nmt.edu/tcc/help/p [...] index.html

 

Tout n'y est pas, mais y'a déjà pas mal de choses renseignées.
Sinon, tu peux utiliser l'aide d'un module avec help dans un terminal/console python.

 
lolight a écrit :

Je ne connaissais pas l’existence de ce Widget, du coup j'ai pas mal de doc à lire.

 

Finalement, label est mieux dans ton cas  :D

 
lolight a écrit :

Un grand merci à toi d'avoir pris le temps de m'aider autant.

 

Bon week-end   :jap:

 

Pas de problèmes, et bon week-end de même.

 

Une autre chose qui devrait te sauter aux yeux :

 
Code :
  1. def bonus_reduction(reduction, kms):
  2. if reduction == 0 :
  3.  return 0
  4. elif reduction > 0 :
  5.  return reduction * kms
  6. elif reduction > 10 :
  7.  print "Erreur, le taux de réduction ne peux être au delà de 10€ du km."
  8. else :
  9.  print "Erreur, le taux de réduction doit être compris entre 0 et 10€."
 

Il y a un problème dans tes conditions.

 

Bon, comme je m'ennuyais, j'ai refais un peu ton code  :o

 
Code :
  1. #!/usr/bin/python3.4
  2. # -*-coding: utf-8 -*
  3. import tkinter as tk
  4. import re
  5. SEP_DEC = ',' # Séparateur des décimaux
  6. def bonusReduction(reduction, kms) :
  7.     return round(reduction * kms, 2)
  8.    
  9. def estimationCoutTrajet(kms, consommation, prixDuLitre) :
  10.     return round(kms * consommation * prixDuLitre / 100, 2)
  11.    
  12. def estimationConsommationTrajet(kms, consommation) :
  13.     return round(kms * consommation / 100, 2)
  14. def afficherResultats(objet) :
  15.     # Ici on vérifie les valeurs des variables tkinter que l'on a défini.
  16.     # Et on a uniquement besoin du widget tkinter auquel on a affilié les StringVars pour y avoir acccès.
  17.     # (dans le code on a utilisé la fenêtre root)
  18.     # variables définies : prix, kms, conso, reduc, resultat
  19.     # On ne fait rien, aucun des champs requis n'ont été renseignés
  20.     if not objet.getvar('prix') and not objet.getvar('kms') and not objet.getvar('conso') :
  21.         return
  22.     prix = objet.getvar('prix')
  23.     kms = objet.getvar('kms')
  24.     conso = objet.getvar('conso')
  25.     if SEP_DEC != '.' :
  26.         prix = prix.replace(SEP_DEC, '.')
  27.         kms = kms.replace(SEP_DEC, '.')
  28.         conso = conso.replace(SEP_DEC, '.')
  29.        
  30.     resultats = []
  31.     # Contrôles des valeurs
  32.     if not prix :
  33.         resultats.append('Vous devez renseigner le prix au litre du carburant.')
  34.     elif not re.match(r'^\d\.\d{2}$', prix) :
  35.         resultats.append('Le prix du carburant doit être de la forme 0{}00 .'.format(SEP_DEC))
  36.     if not kms :
  37.         resultats.append('Vous devez renseigner le nombre de kilomètres à parcourir.')
  38.     elif not re.match('^\d+(\.\d\d?)?$', kms) :
  39.         resultats.append('Kilomètres doit être un entier, ou un nombre décimal à un ou 2 décimaux.')
  40.        
  41.     if not conso :
  42.         resultats.append('Vous devez renseigner la consommation moyenne.')
  43.     elif not re.match('^\d(\.\d)?$', conso) :
  44.         resultats.append('La consommation doit être un entier, ou un décimal.')
  45.        
  46.     #XXX Contrôle de la valeur de réduction à faire, je ne sais pas ce que c'est, ni ce que ça doit contenir...
  47.     reduc = objet.getvar('reduc')
  48.    
  49.     # Erreurs rencontrées
  50.     if resultats :
  51.         objet.setvar('resultat', '\n'.join(resultats))
  52.         return
  53.        
  54.     # Conversion des strings en float pour effectuer les calculs
  55.     prixf = float(prix)
  56.     kmsf = float(kms)
  57.     consof = float(conso)
  58.    
  59.     coutTrajet = str(estimationCoutTrajet(kmsf, consof, prixf))
  60.     consoTrajet = str(estimationConsommationTrajet(kmsf, consof))
  61.    
  62.     if SEP_DEC != '.' :
  63.         coutTrajet = coutTrajet.replace('.', SEP_DEC)
  64.         consoTrajet = consoTrajet.replace('.', SEP_DEC)
  65.    
  66.     resultats.append("Coût brut du voyage estimé : {}€".format(coutTrajet))
  67.     if reduc :
  68.         #XXX Ajouter à resultats les 2 messages supplémentaires
  69.         pass   
  70.     resultats.append('Consommation : {}L'.format(consoTrajet))
  71.    
  72.     objet.setvar('resultat', '\n'.join(resultats))
  73. fenetre = tk.Tk()
  74. fenetre.title = "VoyCalc"
  75. fenetre['bg'] = "dark slate grey"
  76. cadre = tk.Frame(fenetre, bg="dark slate grey" )
  77. cadre.grid()
  78. cadre.columnconfigure(2, weight=1)
  79. canvas = tk.Canvas(cadre, width=500, height=50, bg="dark slate grey" )
  80. canvas.grid(row=1, column=1, columnspan=2)
  81. photo = tk.PhotoImage(file="VoyCalc.png" )
  82. canvas.create_image(0, 0, anchor=tk.NW, image=photo)
  83. labelInfo = tk.Label(cadre, text="Calcul du coût du carburant d'un trajet", bg="dark slate grey" )
  84. labelInfo.grid(row=2, column=1, columnspan=2, pady=20)
  85. labelPrix = tk.Label(cadre, text="Prix au litre du carburant :", bg="dark slate grey" )
  86. labelPrix.grid(row=3, column=1, padx=15, pady=5, sticky=tk.E)
  87. varPrix = tk.StringVar(fenetre, "", "prix" ) # tkinter Variable peut prendre 3 arguments => StringVar(master, value, name)
  88. entreePrix = tk.Entry(cadre, textvariable=varPrix, width=10, bg="dark slate grey" )
  89. entreePrix.grid(row=3, column=2, sticky=tk.W)
  90. entreePrix.columnconfigure(1, weight=5)
  91. labelKms = tk.Label(cadre, text="Nombre de kilomètres à parcourir :", bg="dark slate grey" )
  92. labelKms.grid(row=4, column=1, padx=15, pady=5, sticky=tk.E)
  93. varKms = tk.StringVar(fenetre, "", "kms" )
  94. entreeKms = tk.Entry(cadre, textvariable=varKms, width=10, bg="dark slate grey" )
  95. entreeKms.grid(row=4, column=2, sticky=tk.W)
  96. labelConso = tk.Label(cadre, text="Consommation (litres/100) :", bg="dark slate grey" )
  97. labelConso.grid(row=5, column=1, padx=15, pady=5, sticky=tk.E)
  98. varConso = tk.StringVar(fenetre, "", "conso" )
  99. entreeConso = tk.Entry(cadre, textvariable=varConso, width=10, bg="dark slate grey" )
  100. entreeConso.grid(row=5, column=2, sticky=tk.W)
  101. labelReduc= tk.Label(cadre, text="Réduction (optionnel) :", bg="dark slate grey" )
  102. labelReduc.grid(row=6, column=1, padx=15, pady=5, sticky=tk.E)
  103. varReduc = tk.StringVar(fenetre, "", "reduc" )
  104. entreeReduc = tk.Entry(cadre, textvariable=varReduc, width=10, bg="dark slate grey" )
  105. entreeReduc.grid(row=6, column=2, sticky=tk.W)
  106. varResultat = tk.StringVar(fenetre, "", "resultat" )
  107. labelResultat = tk.Label(cadre, textvariable=varResultat, width=70, height=4, justify=tk.LEFT, bg="dark slate grey" )
  108. labelResultat.grid(row=8, column=1, columnspan=2)
  109. boutonCalcul = tk.Button(cadre, text="Calculer", relief="flat", command=lambda f=fenetre : afficherResultats(f))
  110. boutonCalcul.grid(row=7, column=1, columnspan=2, pady=20)
  111. fenetre.mainloop()
 

Comme tu peux le voir, rien de bien sorcier excepté dans la fonction afficherResultat.
Et il te reste à ajouter les calculs et messages concernant le bonus (pas compris ce que c'est).
Comme tu as le modèle, ça devrait être facile.

 

Les contrôles de valeurs sont subjectifs, tu peux modifier comme tu veux.
Et si y'a quelque chose que tu comprends pas, demande, sauf pour les regex, trop compliqué à expliquer  :whistle:

 


Message édité par bistouille le 26-08-2016 à 19:08:55

---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2287042
lolight
Posté le 29-08-2016 à 11:55:36  profilanswer
 

Salut bistouille, tu déboite !
 
Super, je suis trop fan, j'ai regardé ton code hier dans l'ensemble histoire de voir un peut les généralitées, et je m'y suis repenché aujourd'hui un peut plu sen détail, il n'y a effectivement rien de bien méchant mais quand même pas mal de syntaxe/façon "nouvelle" de traiter les choses.  
Typiquement le SEP_DEC (c'est super pratique, c'est vrais qu'on sais jamais si on doit mettre une virgule ou un point), les columnspan/column, enfin pas mal de petit nouveau truc qui faut que j'ajoute à lexique :D
 
Un gros merci pour avoir commenté ton code ça m'a beaucoup aider à trouver quesque tu fesais et ou :p
 
Au final du coup j'ai reprise ton code et essayé de compléter comme il faut aux endroit ou il faut les informations correspondantes.
Notamment pour la réduction. D'ailleur cette réduction est donnée à certain employé qui font beaucoup de déplacement dans certaines entreprise, je connais pas le détail mais je crois que c'est une indémnisation au kms.
Après c'est un amis qui m'a conseillé d'intégré ça puis bon, ça fais de l'dexercice :p.
 
Si non niveau regex, je suppose que c'est e genre de truc "r'^\d\.\d{2}$'", pour le coup j'avais un erreur sur l'un d'enntreux, j'ai un peut improvisé en copiant le format d'un autre que tu avais écris qui devais avoir le même format.
 
Je link le code modifié et l'image, parce que c'est quand même plus sexe avec :D
Je crois qu'au final sans ton aide j'y serais jamais arrivé, mais ça me hype !
Encore merci pour ton aide, si mon code n'es pas trop salle, il me reste plus qu'à me trouver une autre idée d'exo pour essayé d'assimiler complètement ce que j'ai apprise avec celui-ci >.>
 
J'ai peut être fais des erreus dans, du coup, le peux de chose que j'ai écris  :lol: , notamment au niveau des resultats.append ou je ne comprends pas le if ?, je viens de comprendre en relisant, je pense que tu souhaitais que je dise si reduction ne vaut rien ou n'es pas renseigner, ne pas le mentionner ou boycott l'affichage de réduction dans  résultats ?
Au final j'ai solve tout ça en mettant que réduction devais être égal à 0 si aucune.   :ange:  
Mais je modifierais si c'est plus clean de faire autrement.
 

Code :
  1. #!/usr/bin/python3.4
  2. # -*-coding: utf-8 -*
  3. import tkinter as tk
  4. import re
  5. SEP_DEC = ',' # Séparateur des décimaux
  6. def bonusReduction(reduction, kms) :
  7.     return round(reduction * kms, 2)
  8.  
  9. def estimationCoutTrajet(kms, consommation, prixDuLitre) :
  10.     return round(kms * consommation * prixDuLitre / 100, 2)
  11.  
  12. def estimationConsommationTrajet(kms, consommation) :
  13.     return round(kms * consommation / 100, 2)
  14. def estimationConsommationTrajetTotal(kms, consommation, reduction) :
  15.     return round((kms * consommation / 100 ) - (reduction * kms), 2)
  16. def afficherResultats(objet) :
  17.     # Ici on vérifie les valeurs des variables tkinter que l'on a défini.
  18.     # Et on a uniquement besoin du widget tkinter auquel on a affilié les StringVars pour y avoir acccès.
  19.     # (dans le code on a utilisé la fenêtre root)
  20.     # variables définies : prix, kms, conso, reduc, resultat
  21.     # On ne fait rien, aucun des champs requis n'ont été renseignés
  22.     if not objet.getvar('prix') and not objet.getvar('kms') and not objet.getvar('conso') and not objet.getvar('reduc') :
  23.         return
  24.     prix = objet.getvar('prix')
  25.     kms = objet.getvar('kms')
  26.     conso = objet.getvar('conso')
  27.     reduc = objet.getvar('reduc')
  28.     if SEP_DEC != '.' :
  29.         prix = prix.replace(SEP_DEC, '.')
  30.         kms = kms.replace(SEP_DEC, '.')
  31.         conso = conso.replace(SEP_DEC, '.')
  32.         reduc = reduc.replace(SEP_DEC, '.')
  33.      
  34.     resultats = []
  35.     # Contrôles des valeurs
  36.     if not prix :
  37.         resultats.append('Vous devez renseigner le prix au litre du carburant.')
  38.     elif not re.match(r'^\d\.\d{2}$', prix) :
  39.         resultats.append('Le prix du carburant doit être de la forme 0{}00 .'.format(SEP_DEC))
  40.    
  41.     if not kms :
  42.         resultats.append('Vous devez renseigner le nombre de kilomètres à parcourir.')
  43.     elif not re.match('^\d+(\.\d\d?)?$', kms) :
  44.         resultats.append('Kilomètres doit être un entier, ou un nombre décimal à un ou 2 décimaux.')
  45.      
  46.     if not conso :
  47.         resultats.append('Vous devez renseigner la consommation moyenne.')
  48.     elif not re.match('^\d+(\.\d\d?)?$', conso) :
  49.         resultats.append('La consommation doit être un entier, ou un décimal.')
  50.      
  51.     if not reduc :
  52.         resultats.append('Vous devez renseigner votre réduction, 0 si aucune.')
  53.     elif not re.match(r'^\d\.\d{2}$', reduc) :
  54.         resultats.append('La reduction doit être de forme 0{}00 .'.format(SEP_DEC))
  55.    
  56.     # Erreurs rencontrées
  57.     if resultats :
  58.         objet.setvar('resultat', '\n'.join(resultats))
  59.         return
  60.      
  61.     # Conversion des strings en float pour effectuer les calculs
  62.     prixf = float(prix)
  63.     kmsf = float(kms)
  64.     consof = float(conso)
  65.     reducf = float(reduc)
  66.  
  67.     coutTrajet = str(estimationCoutTrajet(kmsf, consof, prixf))
  68.     consoTrajet = str(estimationConsommationTrajet(kmsf, consof))
  69.     consoTrajetTot = str(estimationConsommationTrajetTotal(kmsf, consof, reducf))
  70.     reduction = str(bonusReduction(kmsf, reducf))
  71.     if SEP_DEC != '.' :
  72.         coutTrajet = coutTrajet.replace('.', SEP_DEC)
  73.         consoTrajet = consoTrajet.replace('.', SEP_DEC)
  74.         consoTrajetTot = consoTrajetTot.replace('.', SEP_DEC)
  75.     resultats.append("Coût du voyage estimé : {}€".format(consoTrajetTot))
  76.     resultats.append("Coût brut du voyage estimé : {}€".format(coutTrajet))
  77.     if reduc :
  78.         #XXX Ajouter à resultats les 2 messages supplémentaires
  79.         pass 
  80.     resultats.append('Consommation : {}L'.format(consoTrajet))
  81.     resultats.append('Réduction : {}€ '.format(reduction))
  82.  
  83.     objet.setvar('resultat', '\n'.join(resultats))
  84. fenetre = tk.Tk()
  85. fenetre.title = "VoyCalc"
  86. fenetre['bg'] = "dark slate grey"
  87. cadre = tk.Frame(fenetre, bg="dark slate grey" )
  88. cadre.grid()
  89. cadre.columnconfigure(2, weight=1)
  90. canvas = tk.Canvas(cadre, width=500, height=50, bg="dark slate grey" )
  91. canvas.grid(row=1, column=1, columnspan=2)
  92. photo = tk.PhotoImage(file="VoyCalc.png" )
  93. canvas.create_image(0, 0, anchor=tk.NW, image=photo)
  94. labelInfo = tk.Label(cadre, text="Calcul du coût du carburant d'un trajet", bg="dark slate grey" )
  95. labelInfo.grid(row=2, column=1, columnspan=2, pady=20)
  96. labelPrix = tk.Label(cadre, text="Prix au litre du carburant :", bg="dark slate grey" )
  97. labelPrix.grid(row=3, column=1, padx=15, pady=5, sticky=tk.E)
  98. varPrix = tk.StringVar(fenetre, "", "prix" ) # tkinter Variable peut prendre 3 arguments => StringVar(master, value, name)
  99. entreePrix = tk.Entry(cadre, textvariable=varPrix, width=10, bg="dark slate grey" )
  100. entreePrix.grid(row=3, column=2, sticky=tk.W)
  101. entreePrix.columnconfigure(1, weight=5)
  102. labelKms = tk.Label(cadre, text="Nombre de kilomètres à parcourir :", bg="dark slate grey" )
  103. labelKms.grid(row=4, column=1, padx=15, pady=5, sticky=tk.E)
  104. varKms = tk.StringVar(fenetre, "", "kms" )
  105. entreeKms = tk.Entry(cadre, textvariable=varKms, width=10, bg="dark slate grey" )
  106. entreeKms.grid(row=4, column=2, sticky=tk.W)
  107. labelConso = tk.Label(cadre, text="Consommation (litres/100) :", bg="dark slate grey" )
  108. labelConso.grid(row=5, column=1, padx=15, pady=5, sticky=tk.E)
  109. varConso = tk.StringVar(fenetre, "", "conso" )
  110. entreeConso = tk.Entry(cadre, textvariable=varConso, width=10, bg="dark slate grey" )
  111. entreeConso.grid(row=5, column=2, sticky=tk.W)
  112. labelReduc= tk.Label(cadre, text="Réduction (optionnel) :", bg="dark slate grey" )
  113. labelReduc.grid(row=6, column=1, padx=15, pady=5, sticky=tk.E)
  114. varReduc = tk.StringVar(fenetre, "", "reduc" )
  115. entreeReduc = tk.Entry(cadre, textvariable=varReduc, width=10, bg="dark slate grey" )
  116. entreeReduc.grid(row=6, column=2, sticky=tk.W)
  117. varResultat = tk.StringVar(fenetre, "", "resultat" )
  118. labelResultat = tk.Label(cadre, textvariable=varResultat, width=70, height=4, justify=tk.LEFT, bg="dark slate grey" )
  119. labelResultat.grid(row=8, column=1, columnspan=2)
  120. boutonCalcul = tk.Button(cadre, text="Calculer", relief="flat", command=lambda f=fenetre : afficherResultats(f))
  121. boutonCalcul.grid(row=7, column=1, columnspan=2, pady=20)
  122. boutonQuit = tk.Button(cadre, text="Quiter", relief="flat", command=fenetre.quit)
  123. boutonQuit.grid(row=9, columnspan=4, pady=20)
  124. fenetre.mainloop()


 
https://lh4.googleusercontent.com/jjruQo6Gj1Rg8JbLOVbupaDaEGI8MTBjfqdWvkUE7N2gwy2W3XYnFXd2O6FxfIdCh39kPTXyO6hFykc=w1366-h653
 
 :hello:


---------------
--- Mon topik d'Ach/Ven ---
n°2287056
bistouille
Posté le 29-08-2016 à 18:18:10  profilanswer
 

lolight a écrit :

Typiquement le SEP_DEC (c'est super pratique, c'est vrais qu'on sais jamais si on doit mettre une virgule ou un point)


 
Oui, j'ai laissé de sorte que l'on puisse utiliser le point ou la virgule, mais tu peux carrément n'autoriser que la virgule, faudra modifier les expressions régulières.
 

lolight a écrit :

Au final du coup j'ai reprise ton code et essayé de compléter comme il faut aux endroit ou il faut les informations correspondantes.
Notamment pour la réduction. D'ailleur cette réduction est donnée à certain employé qui font beaucoup de déplacement dans certaines entreprise, je connais pas le détail mais je crois que c'est une indémnisation au kms.
Après c'est un amis qui m'a conseillé d'intégré ça puis bon, ça fais de l'dexercice :p.


 
Ok, mais une indemnisation relative par rapport à quoi ? C'est fixe ? indemnité forfaitaire ? un pourcentage ?  
Car dans ce que tu as mit, ça ne peut pas coller, on se retrouve avec des valeurs négatives en résultat.
 

lolight a écrit :

Si non niveau regex, je suppose que c'est e genre de truc "r'^\d\.\d{2}$'", pour le coup j'avais un erreur sur l'un d'enntreux, j'ai un peut improvisé en copiant le format d'un autre que tu avais écris qui devais avoir le même format.


 
Oui, c'est ça, mais chaque type de valeur doit être contrôlé différemment, faut se demander ce que l'on attend comme valeur pour chaque saisie (entier ? décimal ?, valeur max ? valeur min ?)
 
Par exemple pour kilomètres :
Est-il réellement utile d'autoriser des 10èmes ou 100èmes ? Ou est-il préférable de n'autoriser que des entiers ?
Quelle valeur max doit-on autoriser ? (car là, on peut calculer pour un trajet terre lune :D )
Une valeur minimum ?
 
Et donc je doute que la valeur réduction doit avoir ce format.
 

lolight a écrit :

J'ai peut être fais des erreus dans, du coup, le peux de chose que j'ai écris  :lol: , notamment au niveau des resultats.append ou je ne comprends pas le if ?, je viens de comprendre en relisant, je pense que tu souhaitais que je dise si reduction ne vaut rien ou n'es pas renseigner, ne pas le mentionner ou boycott l'affichage de réduction dans  résultats ?
Au final j'ai solve tout ça en mettant que réduction devais être égal à 0 si aucune.   :ange:  
Mais je modifierais si c'est plus clean de faire autrement.


 
Oui, c'était dans l'optique de faire ça, si pas de réduction renseignée, on n'affiche pas les messages concernés, mais tu fais comme tu veux, c'est ton script.
 
D'un point de vue, il n'est pas nécessaire de contraindre l'utilisateur à rentrer une valeur optionnelle, si la valeur est vide, c'est qu'il ne l'a pas renseignée.
Mais d'un autre point de vue, ça peut être une confirmation indirecte pour être certain que l'utilisateur n'a pas omit de renseigner ce paramètre.
 

lolight a écrit :

Encore merci pour ton aide, si mon code n'es pas trop salle, il me reste plus qu'à me trouver une autre idée d'exo pour essayé d'assimiler complètement ce que j'ai apprise avec celui-ci >.>


 
Pas de problèmes ;)
Mais tu peux déjà continuer avec celui-là, par exemple en utilisant de l'objet plutôt que du procédural (même si en python tout est objet), ou en ajoutant des trucs, par exemple afficher le format de saisie requis à côté du champ de saisie lorsque celui-ci a le focus, ou encore une infobulle, enfin y'a de quoi faire.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.
n°2287141
lolight
Posté le 31-08-2016 à 10:27:45  profilanswer
 

Bon au final je vais continuer à développer celui la, je pense que je peux affiner pas mal de chose que tu as énnoncé ci dessus et voir rajouter une autre partie pour le calcul d'un coup de séjour par exemple qui me semble plus complexe et à la fois dans le même ton.  :)  
 
En fait c'est négatif car la voiture dans ces cas la appartien au salarié, l'entreprise donne donc une indemnisation sencé aidé au financement de l'usure de la voiture généré par le déplacement professionel. C'est donc une indémnisation fixe au kms mais encore une fois je ne connais pas tellement le détail mais sur la théorie c'est ça... enfin je crois  :lol:  
 
Je reviendrais sur ce sujet pour poster mon nouveau code. J'ai pas mal de projet en cours et la reprise qui approche qui font que mon temps libre accordé au dev et plus restreins mais bon on est pas pressé :D
 
Encore une fois merci, c'est fou que tu ai passé tant de temps a aider un noob comme moi, en tout cas ça fais plaisir et on voir que tu aime ça !  :jap:  
 
Thanks à bientôt pour une "mise à jour" de notre programme de folie VoyCalc !  :love:


---------------
--- Mon topik d'Ach/Ven ---
n°2287191
bistouille
Posté le 31-08-2016 à 18:56:20  profilanswer
 

lolight a écrit :

En fait c'est négatif car la voiture dans ces cas la appartien au salarié, l'entreprise donne donc une indemnisation sencé aidé au financement de l'usure de la voiture généré par le déplacement professionel. C'est donc une indémnisation fixe au kms mais encore une fois je ne connais pas tellement le détail mais sur la théorie c'est ça... enfin je crois  :lol:  


 
Oui, donc je pense que ça doit-être soit un pourcentage, soit une indemnité fixe, il faudra que tu revois le calcul.
 

lolight a écrit :

Encore une fois merci, c'est fou que tu ai passé tant de temps a aider un noob comme moi, en tout cas ça fais plaisir et on voir que tu aime ça !  :jap:  
 
Thanks à bientôt pour une "mise à jour" de notre programme de folie VoyCalc !  :love:


 
Oui enfin, je ne suis qu'un amateur ayant quelques connaissances diverses, c'est un hobby auquel je m'adonne, chacun son truc :whistle:  
 
Bonne continuation.


---------------
On croit souvent avoir vu le fond de la stupidité humaine, et il parfois nécessaire qu'on vous rappelle qu'elle n'a pas de fond.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [Novice] De la ldc à Tkinter Problème de fonction

 

Sujets relatifs
tkinter faire varié un messageAide Tkinter Python
Python tkinter taquinLes meilleurs livres pour un novice total en C++ ?
Thread et tkinterjava virtual machine dans une fenêtre tkinter
Python et Tkinter/PmwTkinter-Problème pour récupérer les valeurs
Projet traitement image PGM et Scale TkinterPendu Tkinter
Plus de sujets relatifs à : [Novice] De la ldc à Tkinter Problème de fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR