Forcer l'affichage avant la fin des calculs

Messages postés
10
Date d'inscription
samedi 18 novembre 2017
Dernière intervention
23 février 2018
-
Bonjour, bonsoir,
j'ai une problème (c'est pourquoi je suis ici !!)
j'ai créé un petit programme qui permet de tracer des courbes mathématiques.
pour cela, j'ai découpé la courbe en plein de petites droites de quelques pixels de longueur...
le problème, c'est que l'ordi calcul d'abord la position de TOUTES les droites et les affiche ensuite. La courbe apparaît donc d'un seul coup. Est-il possible d'afficher les droites au fur et à mesure que l'ordinateur calcule leur position ?
Les calculs sont d'ailleurs trop nombreux et je n'arrive pas à les réduire. Les autres remarques pour améliorer mon code sont bien-entendu les bienvenues... :)

from tkinter import * ; from math import * ; import tkinter as tk

a,b=1350,650 ; l=50 ; m=l+20 ; h1,h2,h3,h4=20,12,45,37

fen=Tk()
contour = Canvas(fen, width=a, height=60) ; traceur = Canvas(fen, width=a, height=b, bg='ivory') ; contour.pack() ; traceur.pack(side = BOTTOM)

contour.create_text(l, h1, text="x min :", fill='green') ; contour.create_text(l+178,h1, text="x max :", fill='green') ; contour.create_text(l,h3, text="y min :", fill='green') ; contour.create_text(l+178,h3, text="y max :", fill='green') ; contour.create_text(l+502,h1, text="f(x)=")
xmin, xmax, ymin, ymax, entree = Entry(fen), Entry(fen), Entry(fen), Entry(fen), Entry(fen)
xmin.place(x=m, y=h2) ; xmax.place(x=m+180, y=h2) ; ymin.place(x=m, y=h4) ; ymax.place(x=m+180, y=h4) ; entree.place(x=m+496, y=h2)

def deplaceraxes(axes):
   x1=float(xmin.get()) ; x2=float(xmax.get()) ; y1=float(ymin.get()) ; y2=float(ymax.get())
   a1 = (y2*b)/(y2-y1) ; a2 = a-(x2*a)/(x2-x1)
   a21 = a2-a2/x1 ; a22 = a2+a2/x1 ; a11 = a1-a1/y2 ; a12 = a1+a1/y2
   traceur.delete(ALL)
   traceur.create_line(0, a1, a-20, a1, arrow='last') ; traceur.create_line(a2, b, a2, 20, arrow='last')
   traceur.create_line(a21, a1-3, a21, a1+3) ; traceur.create_line(a22, a1-3, a22, a1+3) ; traceur.create_line(a2-3, a12, a2+3, a12) ; traceur.create_line(a2-3, a11, a2+3, a11)
   traceur.create_text(a22, a1-10, text="-1") ; traceur.create_text(a21, a1-10, text="1") ; traceur.create_text(a2-10, a12, text="-1") ; traceur.create_text(a2-7, a11, text="1")

def tracer(f):
   x1=float(xmin.get()) ; x2=float(xmax.get()) ; y1=float(ymin.get()) ; y2=float(ymax.get())
   a1 = (y2*b)/(y2-y1) ; a2 = a-(x2*a)/(x2-x1)
   x = x1 ; z=15 ; i = entree.get()
   for z in range (12, 1000000, 1):
     traceur.delete(z)
   while x<x2:
     x=x+0.00001
     n=eval(i)
     traceur.create_line(a2-x*(a2/x1),a1-n*(a1/y2),a2-x*(a2/x1)+0.07,a1-n*(a1/y2))

bout1 =  Button(contour, text='Quitter', command = fen.destroy) ; bout1.place(x=a-100,y=5)

entree.bind('<Return>', tracer) ; xmax.bind('<Return>', deplaceraxes) ; ymin.bind('<Return>', deplaceraxes) ; ymax.bind('<Return>', deplaceraxes) ; xmin.bind('<Return>', deplaceraxes)

fen.mainloop()

je code en python 3.6
merci d'avance
Afficher la suite 

Votre réponse

1 réponse

Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 décembre 2018
0
Merci
Bonsoir
je ne suis pas codeur Python, mais je sais qu'un des ses points forts est le tracé de courbes.
Alors pourquoi réinventer l'eau chaude?
http://www.courspython.com/introduction-courbes.html
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.