Tkinter-Problème pour récupérer les valeurs

Tkinter-Problème pour récupérer les valeurs - Python - Programmation

Marsh Posté le 24-03-2015 à 09:50:47    

Bonjour,
 
je suis en train d'essayer de coder une interface graphique qui permette à l'utilisateur de choisir un modèle, puis de rentrer des valeurs et qui trace le graphe qui correspond. Je suis bloquée, je ne comprends pas du tout ce qui ne marche pas.
- je n'arrive pas à récupérer la valeur que 'Double' enregistre plus tard dans mon code
- lorsque je lance le code, il me dit qu'il ne peut pas convertir la valeur de ei.get() en float. Je pense que c'est parce qu'il n'attend pas que je rentre des valeurs et que j'appuie sur ok. Comment corriger cela ?
 
Merci pour toute votre aide, je commence vraiment à desesperer.
 

Code :
  1. # -*- coding: utf-8 -*-
  2. from tkinter import *
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. class GUI:
  6.     def __init__(self):
  7.         self.root      = Tk()
  8.         self.labelVariable = StringVar()
  9.         self.root.title('Projet informatique')
  10.         self.initialize()
  11.         self.root.mainloop()
  12.     def initialize(self):
  13.         self.main = Frame(self.root)
  14.         self.main.pack()
  15.         label = Label(self.main, textvariable=self.labelVariable, font=('courier',10,'bold'), anchor="w", fg="red", bg="white" )
  16.         label.pack()
  17.         self.labelVariable.set("Modelisation de populations atteintes dun virus" )
  18.         v=Listbox(self.main)
  19.         v.insert("end","Modele SIR" )
  20.         v.insert("end","Modele de Witowski" )
  21.         v.insert("end","Modele de Munz" )
  22.         v.insert("end","Modele avec traitement" )
  23.         v.bind("<Double-Button-1>", self.Double)
  24.         v.pack(expand=1,fill=BOTH)
  25.     def Double(self,event):
  26.         widget    = event.widget
  27.         selection = widget.curselection()
  28.         value     = widget.get(selection[0])
  29.         self.newWindow(value)
  30.         return(value)
  31.     def ModifyTextarea(self,elem,msg,clear=None):
  32.         elem.config(state=NORMAL)
  33.         if clear:
  34.             elem.delete(1.0, END)
  35.         else:
  36.             elem.insert(END,msg)
  37.         elem.config(state=DISABLED)
  38.     def newWindow(self,msg):
  39.         top = Toplevel(self.root)
  40.         q1 = Frame(top)
  41.         q1.pack()
  42.         top.grab_set()
  43.         text = Text(q1,state=DISABLED,exportselection=True)
  44.         text.pack()
  45.         self.ModifyTextarea(text,msg)
  46.         e1=Entry(q1)
  47.         e2=Entry(q1)
  48.         e3=Entry(q1)
  49.         e4=Entry(q1)
  50.         e5=Entry(q1)
  51.         e6=Entry(q1)
  52.         e1.pack()
  53.         e2.pack()
  54.         e3.pack()
  55.         e4.pack()
  56.         e5.pack()
  57.         e6.pack()
  58.         def zombies() :
  59.                 a=float(e1.get())
  60.                 b=float(e2.get())
  61.                 ze=float(e3.get())
  62.                 T=float(e4.get())
  63.                 N=float(e5.get())
  64.                 dt=float(e6.get())
  65.                 n = T/dt
  66.                 n=int(n)
  67.                 t=np.zeros((n+1))
  68.                 for i in range (0,n):
  69.                     t[0]=0
  70.                     t[i+1]=t[i]+dt
  71.                 s = np.zeros((n+1))
  72.                 z = np.zeros((n+1))
  73.                 r = np.zeros((n+1))
  74.                 s[0] = N-1
  75.                 z[0] =1
  76.                 r[0] = 0
  77.                 for i in range (n-1):
  78.                     s[i+1] = s[i] + dt*(-b*s[i]*z[i])
  79.                     z[i+1] = z[i] + dt*(b*s[i]*z[i]-a*s[i]*z[i]+ze*r[i])
  80.                     r[i+1] = r[i] + dt*(a*s[i]*z[i]- ze*r[i])
  81.                     if s[i+1]<0 or s[i+1] >N:
  82.                         s[i+1]=0
  83.                         break
  84.                     if z[i+1] > N or z[i+1] < 0:
  85.                         z[i+1]=0
  86.                         break
  87.                     if r[i+1] <0 or r[i+1] >N:
  88.                         r[i+1]=0
  89.                         break
  90.                     return (t,s,r,z,i+2)
  91.         btnquit = Button(q1,width = 1,text = "Ok",command =zombies)
  92.         btnquit.pack()
  93.         t,s,r,z,i=zombies()
  94.         plt.plot(t[:i],s[:i],'b')
  95.         plt.plot(t[:i],z[:i],'r')
  96.         plt.plot(t[:i],r[:i],'y')
  97.         plt.show()
  98. if __name__ == "__main__":
  99.     app = GUI()

Reply

Marsh Posté le 24-03-2015 à 09:50:47   

Reply

Marsh Posté le 02-10-2015 à 14:35:00    

c'est pas une histoire d'espace avant ou/et après les "=" ? il me semble, bien que débutant, que des fois c'est important non?


---------------
Swisscore
Reply

Marsh Posté le 07-10-2015 à 11:34:27    

Il y a des bouts de bricolage qui sont vraiment bizarres dans ton code. Dans zombies pourquoi tu as une boucle alors que tu boucles pas? (soit tu break et sors de la boucle soit tu return ligne 103 et sors aussi de la boucle), et pourquoi tu appelles vas chercher les valeurs de tes inputs juste après avoir créé les dits inputs (ligne 111)? Logiquement cliquer sur le bouton devrait lancer les calculs et si pas d'erreur afficher le graph. Là cliquer sur le bouton va lancer les calculs et balancer le résultat à la poubelle sans rien en faire.

 

Et dans tous les cas, ta fonction de calcul doit valider que les valeurs dans les champs ont un sens, tkinter.Entry ne fait aucune validation donc l'utilisateur peut saisir tout et n'importe quoi.

 
swissforever a écrit :

c'est pas une histoire d'espace avant ou/et après les "=" ? il me semble, bien que débutant, que des fois c'est important non?


C'est jamais un problème en python, même si avoir des espacements propres et réguliers est habituellement préféré pour question de lisibilité.


Message édité par masklinn le 07-10-2015 à 11:35:10

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed