Forcer l'affichage avant la fin des calculs

jeanmartre 9 Messages postés samedi 18 novembre 2017Date d'inscription 8 janvier 2018 Dernière intervention - 8 janv. 2018 à 18:44 - Dernière réponse : Whismeril 10734 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 8 janvier 2018 Dernière intervention
- 8 janv. 2018 à 20:32
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 

1 réponse

Répondre au sujet
Whismeril 10734 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 8 janvier 2018 Dernière intervention - 8 janv. 2018 à 20:32
0
Utile
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.