Juste une appli me permettant de tracer des fonction:
Exemple: cos(x)
Nota Bene:Entrer (x)**2 au lieu de x**2
Source / Exemple :
# -*- coding: iso8859-15 -*-
from Tkinter import*
from math import*
import tkMessageBox
ref=[]
dic={}
class Application(Frame):
"""Mise en place de l'interface"""
def __init__(self):
Frame.__init__(self)
self.master.title("::.Ma fonction.::-By Kouakou021988")
self.configure(bg="grey40",bd=0,relief=FLAT)
self.master.resizable(width=False, height=False)
self.master.protocol("WM_DELETE_WINDOW", self.quitter)
self.pack(side=TOP)
self.coul=['red','blue','yellow','green']
self.coord=[]
self.courb=['none']
self.build()
def build(self):
"""mise en place des bouton,..."""
Label(self,text="f(x): ",font='arial 10 italic',background='grey40',fg='white').pack(side=LEFT)
self.ent_fct=Entry(self,width=25,font='arial 10 bold',relief=FLAT,fg='black')
self.ent_fct.pack(side=LEFT,fill=BOTH,expand=1)
Button(self,text="Tracer",font='arial 8 bold',background='grey40',
foreground='white',command=self.traceur).pack(side=RIGHT)
self.can=Canvas(self.master,bg='black',height=400,width=600)
self.can.pack(side=LEFT,fill=BOTH,expand=1)
pas=25
self.can.create_line(10,200,600,200,arrow=LAST,fill='white') #axe x
for x in range(1,11):
stx=300+x*pas
self.can.create_line(stx,0,stx,400,fill='grey40') #196/204
self.can.create_text(stx,210,text=str(x),fill='white',font='arial 6')
for x in range(1,11):
stx=300-x*pas
self.can.create_line(stx,0,stx,400,fill='grey40')
self.can.create_text(stx,210,text='-'+str(x),fill='white',font='arial 6')
self.can.create_line(300,395,300,5,arrow=LAST,fill='white') #axe y
for y in range(1,8):
sty=200+y*pas
self.can.create_line(0,sty,600,sty,fill='grey40') #296/304
self.can.create_text(310,sty,text='-'+str(y),fill='white',font='arial 6')
for y in range(1,8):
sty=200-y*pas
self.can.create_line(0,sty,600,sty,fill='grey40')
self.can.create_text(310,sty,text=str(y),fill='white',font='arial 6')
self.can.create_text(305,210,text=str(0),fill='white',font='arial 6')
fram=Frame(self.master)
fram.pack(side=RIGHT)
self.lstbox=Listbox(fram,height=5,font='arial 8 bold',fg='black')
self.lstbox.pack(side=TOP)
self.lstbox.insert(END,'none')
Button(fram,text="Reset",font='arial 8',command=self.reset).pack(side=LEFT)
self.re=Button(fram,text="Effacer Tracé",font='arial 8',command=self.efface)
self.re.pack(side=LEFT)
self.re.config(state=DISABLED)
self.lstbox.bind("<Button-1>",self.option)
def option(self,event=None):
self.master.update()
y=event.y
y=self.lstbox.nearest(y)
y=self.lstbox.get(y)
if y!='none':
if ref:
for i in ref:
for x in i: self.can.itemconfig(x, width =1)
self.re.config(state=NORMAL)
self.y=y #nom de la fct dans le listbox
self.coord=dic[self.y]
ref.append(self.coord)
for i in self.coord:
self.can.itemconfig(i, width =3)
self.can.lift(i)
if y=='none':
if self.coord:
for i in self.coord:
self.can.itemconfig(i, width =1)
self.re.config(state=DISABLED)
def efface(self):
try:
for i in self.coord:
self.can.delete(i)
s=self.courb.index(self.y)
self.lstbox.delete(s)
self.courb.remove(self.y)
self.initialise(self.y)
fin=dic.pop(self.y)
self.re.config(state=DISABLED)
except: pass
def initialise(self,f):
c=f.split('-->')[1]
c=c[1:len(c)-1]
self.coul.append(c)
def traceur(self):
fct=self.ent_fct.get()
if fct:
try: c=self.coul.pop()
except: tkMessageBox.showerror("Ma fonction","Limite de fonction atteinte")
else:
self.ph="f(x)="+fct+"-->("+c+")"
self.courbe(fct,c)
self.lstbox.insert(END,self.ph)
self.courb.append(self.ph)
else: pass
def reset(self):
try:
l=dic.keys()
for i in l:
a=dic.pop(i)
for x in a: self.can.delete(x)
self.lstbox.delete(1,END)
except: pass
self.coul=['red','blue','yellow','green']
def courbe(self,fonction="(x)**2.",color="red"):
"""Courbe de la fonction:'(x)**2.' par defaut"""
self.func=fonction
curve=[]
x=0
while x<12:
try:
if "exp" in self.func:
self.func=fonction.replace('exp','zzz')
self.func=self.func.replace('x',str(x))
self.func=self.func.replace('zzz','exp')
y=eval(self.func)
else: y=eval(self.func.replace('x',str(x)))
except: pass
else: curve.append((x*25+300,(-y)*25+200))
x+=0.01
try: a=self.can.create_line(curve,fill=color,smooth=1)
except: a=""
x=0
curve=[]
while x>-12.0:
try:
if "exp" in self.func:
self.func=fonction.replace('exp','zzz')
self.func=self.func.replace('x',str(x))
self.func=self.func.replace('zzz','exp')
y=eval(self.func)
else: y=eval(self.func.replace('x',str(x)))
except: pass
else: curve.append((x*25+300,(-y)*25+200))
x-=0.01
try: b=self.can.create_line(curve,fill=color,smooth=1)
except: b=""
dic[self.ph]=(a,b)
def test(self,v):
pass
def quitter(self):
self.can.delete(ALL)
self.master.destroy()
###--------------------------------------------------------------##############
if __name__=='__main__':
app=Application()
app.mainloop()
Conclusion :
Merci.
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.