Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ## Tracé de graphiques élongation/temps pour
- ## 3 mouvements vibratoires harmoniques
- from tkinter import *
- from math import sin, pi
- from oscillo import Oscillographe
- class OscilloGrapheBis(Oscillographe):
- """Classe dérivée du widget Oscillographe"""
- def __init__(self, master, larg=200, haut=150):
- # Appel du constructeur de la classe parente
- Oscillographe.__init__(self,master,larg,haut)
- def traceAxes(self):
- "Surcharge de la méthode de même nom dans la classe parente"
- # tracé de l'axe de référence Y
- pas = (self.larg-25)/8.
- self.create_line(10+4*pas,self.haut-5,10+4*pas,5, fill="grey90",arrow=LAST)
- # tracé de l'axe de référence X
- self.create_line(10, self.haut/2,self.larg,self.haut/2,fill="grey90", arrow=LAST)
- # indication des grandeurs physiques aux extrémités des axes
- self.create_text(20+4*pas,15, anchor=CENTER,text="e",fill="red")
- self.create_text(self.larg-5,self.haut/2-12,anchor=CENTER,text="t",fill="red")
- class ChoixVibra(Frame):
- """Curseurs pour choisir fréquence, phase et amplitude d'une vibration"""
- def __init__(self, master=None, coul="red"):
- Frame.__init__(self) # constructeur de la classe parente
- # définition de quelques attributs d'instance
- self.freq,self.phase,self.ampl,self.coul=0,0,0,coul
- # Variable d'état de la case à cocher
- self.chk=IntVar() # objet variable Tkinter
- Checkbutton(self, text="Afficher", variable=self.chk,
- fg=self.coul, command=self.setCurve).pack(side=LEFT)
- # Définition des 3 widgets curseurs
- Scale(self, length=150,orient=HORIZONTAL,sliderlength=25,
- label="Fréquence en Hz :", from_=1, to=9, tickinterval=2,
- resolution=0.25,showvalue=0,
- command=self.setFrequency).pack(side=LEFT,pady=5)
- Scale(self, length=150,orient=HORIZONTAL,sliderlength=15,
- label="Phase en degrés :", from_=-180, to=180, tickinterval=90,
- showvalue=0,command=self.setPhase).pack(side=LEFT,pady=5)
- Scale(self, length=150,orient=HORIZONTAL,sliderlength=15,
- label="Apmlitude :", from_=-2, to=10, tickinterval=2,
- showvalue=0,command=self.setAmplitude).pack(side=LEFT,pady=5)
- def setCurve(self):
- print("check setCurve")
- self.master.event_generate("<Control-z>")
- def setFrequency(self,f):
- print("check setFreq")
- self.freq=float(f)
- self.master.event_generate("<Control-z>")
- def setPhase(self,p):
- print("check setPhase")
- pp=float(p)
- self.phase=pp*2*pi #converson degrés radians
- self.master.event_generate("<Control-z>")
- def setAmplitude(self,a):
- print("check setAmplitude")
- self.freq=float(a)
- self.master.event_generate("<Control-z>")
- ## Classe Principale
- class ShowVibra(Frame):
- """Démonstration de mouvements vibratoires harmoniques"""
- def __init__(self, boss=None):
- Frame.__init__(self) # Constructeur de la classe parente
- self.couleur=["green","yellow","orange"]
- self.trace=[0]*3 #liste des tracés (courbes à dessiner)
- self.controle=[0]*3 # liste des panneaux de contrôle
- # Instanciation du canevas des axes X et Y
- self.gra=OscilloGrapheBis (self, larg=1500, haut=400)
- self.gra.configure(bg="grey40",bd=3,relief=SUNKEN)
- self.gra.pack(side=TOP, pady=3)
- # Instanciation de 3 panneaux de contrôle (curseurs)
- for i in range(3):
- self.controle[i]=ChoixVibra(self, self.couleur[i])
- self.controle[i].configure(bd=3,relief=GROOVE)
- self.controle[i].pack(padx=10,pady=3)
- # Designation de l'évènement qui déclenche l'affichage des tracés
- self.master.bind("<Control-Z>",self.montreCourbes)
- self.master.title("Mouvements vibratoires harmoniques")
- self.pack()
- def montreCourbes(self,event):
- """ Affichage de trois graphiques élongation/temps"""
- print("check1")
- for i in range(3):
- # d'abord effacer le tracé éventuel précédent
- self.gra.delete(self.trace[i])
- # Ensuite dessiner le nouveau tracé:
- if self.controle[i].chk.get():
- self.trace[i]=self.gra.traceCourbe(coul= self.couleur[i], freq=self.controle[i].freq, phase=self.controle[i].phase, ampl=self.controle[i].ampl)
- ##### code pour tester la classe #####
- if __name__=="__main__":
- ShowVibra().mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement