Simulation de l'évolution d'une maladie avec des logos
Bonjour,
Je voudrais modéliser l'évolution d'une maladie grâce à python en représentant cette évolution grâce à des logos de bonhomme qui changent de couleurs (plusieurs images). Tout ça dans une frame avec tkinter.
Malgré tout, plusieurs problèmes se posent, dont un en particulier. Je n'arrive pas à afficher un nombre d'images correspondant à, par exemple, le nombre de personnes malades à tel jour puis de faire évoluer ce nombre-là.
(Pour précision : j'ai évidemment télécharger les images). Pour l'instant, voilà à quoi ressemble mon code avec des aides que j'ai pu trouver un peu partout sur internet:
#Télécharger PILLOW PIL dans les outils from tkinter import * from tkinter import ttk from PIL import Image, ImageTk def SJHD( vecteurdedonnees, t, N, tauxmortalité, tauxvaccination, tauxcontamination, tauxhospitalisation, tauxdeces ): S, J, H, D = vecteurdedonnees dSdt = tauxmortalité * (N - S) - tauxcontamination * ((S * H) / N) - tauxvaccination * S dJdt = tauxcontamination * ((S * H) / N) - (tauxmortalité + tauxhospitalisation) * J dHdt = (tauxhospitalisation * J) - (tauxmortalité + tauxdeces) * H dDdt = (tauxdeces * H) + tauxmortalité * D + tauxvaccination * S return dSdt, dJdt, dHdt, dDdt root = Tk() root.title("Pneumatite") root.config(bg="grey") root.geometry("640x480") mainframe = ttk.Frame(root, padding="10 20 10 20") mainframe.grid() ttk.Label(mainframe, text="Nombre total : ").grid(column=1, row=0, sticky=(W,)) ttk.Label(mainframe, text="Nombre de malades ?").grid(column=1, row=1, sticky=(W,)) ttk.Label(mainframe, text="300 ").grid(column=2, row=0, sticky=(N,)) button = ttk.Button(mainframe, text="Cliquer",command=SJHD) button.grid(column=2, row=2, sticky=(W), padx=60, pady=60) malades = StringVar() malades_entry = ttk.Entry(mainframe, width=7, textvariable=malades) malades_entry.grid(column=2, row=1, padx=5, pady=5) #Télécharger les fichiers joints dans le même dossier que pneumatite.py img1_pil = Image.open('monimage.png') mainframe = ttk.Frame(root, padding="10 20 10 20") mainframe.grid(row=2) for colonne in range(50): for rang in range(6): img1_pil.thumbnail((15, 15), Image.LANCZOS) img1 = ImageTk.PhotoImage(img1_pil) label = ttk.Label(mainframe, image=img1) label.image = img1 label.grid(column=colonne, row=rang) N = 300 tauxmortalité = 0 tauxvaccination = 1/100 tauxcontamination = 1/3 tauxhospitalisation = 1/9 tauxdeces = 1/27 nombrejoursdesimu = 30 J0 = input(malades.get()) H0 = 0 D0 = 0 S0 = N-J0-H0-D0 #Télécharger scipy, matplotlib, numpy dans les outils from scipy.integrate import odeint import numpy as np vecteurTemporel = np.linspace(0, nombrejoursdesimu, nombrejoursdesimu) datas = np.array([S0, J0, H0, D0]) solutions = odeint( SJHD, datas, vecteurTemporel, args=( N, tauxmortalité, tauxvaccination, tauxcontamination, tauxhospitalisation, tauxdeces ) ) S, J, H, D = solutions.T S int(S.get()) import matplotlib.image as mpimg import numpy as np img2 = mgimg.imread("monimage.png") if img2.dtype == np.float32 : img2 = (img2*255).astype(np.uint8) int(J.get()) import matplotlib.image as mpimg import numpy as np img3 = mgimg.imread("jaune.png") if img3.dtype == np.float32 : img3 = (img3*255).astype(np.uint8) int(H.get()) import matplotlib.image as mpimg import numpy as np img4 = mgimg.imread("orange.png") if img4.dtype == np.float32: img4= (img4 * 255).astype(np.uint8) int(D.get()) import matplotlib.image as mpimg import numpy as np img5 = mgimg.imread("rouge.png") if img5.dtype == np.float32 : img5= (img5 * 255).astype(np.uint8) root.mainloop()
Merci énormément aux personnes qui pourraient m'aiguiller sur ce thème.
P.S. : c'est plutôt assez urgent malheureusement, un peu dernier espoir.
Macintosh / Safari 15.3
- Simulation de l'évolution d'une maladie avec des logos
- Arrêt maladie - Guide
- Jeu des logos - Télécharger - Jeux vidéo
- La Sécurité sociale durcit les règles - Ces médecins ne pourront plus délivrer d'arrêt maladie - Guide
- Evolution prix amazon - Guide
- Logisim evolution - Télécharger - Vie quotidienne
1 réponse
Bonjour,
Avant de rentrer dans le vif du sujet
- évite les caractère accentués dans le code
- suis le style PEP8, notamment:
- espace après les virgules
- espace autour des opérateurs
- les noms de variables et de fonction sont sous la forme ma_fonction ou ma_variable
- lignes pas trop longue
- merci de mettre en forme ton code (sans oublier de choisir le langage)
J'ai corrigé ton message en conséquence.
Ensuite, concernant ton code, la manière ton code est rédigé, je suspecte que tu as travaillé dans un notebook et que tu as posté toutes tes cellules de code. Si tu veux faire une application tkinter, il va falloir arranger tout ça.
Généralement les imports sont en début de fichier. Tu peux organiser ton code en plusieurs fichiers python si tu le souhaites et les importer les uns les autres. Rien ne t'empêche de tout mettre dans un fichier python et mettant tout ton code source comme tu l'as fait mais :
- les instructions que tu utilises pour afficher le contenu d'une variable sans print ne servent plus à rien en dehors d'un notebook. En fait ces instructions n'ont d'utilité que dans un notebook qui fait implicitement un print de la dernière valeur retournée.
- il serait mieux de réorganiser ton fichier (import en début fichier, puis les fonction auxiliaires, et enfin le lancement du programme principal)
- dans une application tkinter, il faut revoir la manière est organisé ton programme : tu n'es plus dans un paradigme où tu exécutes des cellules les unes après les autres. Tu crées une application, qui s'initialise, puis qui une fois lancée,réagit à des événements (par exemple lorsque l'utilisateur clique sur un bouton). Je t'invite à commencer par un exemple simple le temps de comprendre, puis après tu verras comment adapter ton programme.
Je t'invite également à chercher comment charger et afficher une image dans tkinter (voir par exemple ce tutoriel). En outre, pas besoin de matplotlib.
Je pense également qu'il y a une confusion dans les imports. Par exemple en début de programme tu charges tous les objets tkinter (from tkinter import *). Un import * n'est pas une très bonne pratique en soi, mais surtout, la suite de ton programme montre que la signification de cette instruction t'a échappée. Tu devrais
- soit charger spécifiquement les objets dans le namespace global :
from tkinter import Label, Entry entry = Entry(...) label = Label(...)
- soit en important tout tkinter mais en gardant le namespace
import tkinter as ttk entry = ttk.Entry(...) label = ttk.Label(...)
Bonne chance