Advertisement
ERENARD63

Showvibra

Jan 29th, 2019
353
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.03 KB | None | 0 0
  1. ## Tracé de graphiques élongation/temps pour
  2. ## 3 mouvements vibratoires harmoniques
  3.  
  4. from tkinter import *
  5. from math import sin, pi
  6. from oscillo import Oscillographe
  7.  
  8. class OscilloGrapheBis(Oscillographe):
  9.     """Classe dérivée du widget Oscillographe"""
  10.     def __init__(self, master, larg=200, haut=150):
  11.         # Appel du constructeur de la classe parente
  12.         Oscillographe.__init__(self,master,larg,haut)
  13.  
  14.     def traceAxes(self):
  15.         "Surcharge de la méthode de même nom dans la classe parente"
  16.         # tracé de l'axe de référence Y
  17.         pas = (self.larg-25)/8.
  18.         self.create_line(10+4*pas,self.haut-5,10+4*pas,5, fill="grey90",arrow=LAST)
  19.  
  20.         # tracé de l'axe de référence X
  21.         self.create_line(10, self.haut/2,self.larg,self.haut/2,fill="grey90", arrow=LAST)
  22.  
  23.         # indication des grandeurs physiques aux extrémités des axes
  24.         self.create_text(20+4*pas,15, anchor=CENTER,text="e",fill="red")
  25.         self.create_text(self.larg-5,self.haut/2-12,anchor=CENTER,text="t",fill="red")
  26.  
  27. class ChoixVibra(Frame):
  28.     """Curseurs pour choisir fréquence, phase et amplitude d'une vibration"""
  29.     def __init__(self, master=None, coul="red"):
  30.         Frame.__init__(self)        # constructeur de la classe parente
  31.         # définition de quelques attributs d'instance
  32.         self.freq,self.phase,self.ampl,self.coul=0,0,0,coul
  33.         # Variable d'état de la case à cocher
  34.         self.chk=IntVar()       # objet variable Tkinter
  35.         Checkbutton(self, text="Afficher", variable=self.chk,
  36.             fg=self.coul, command=self.setCurve).pack(side=LEFT)
  37.  
  38.         # Définition des 3 widgets curseurs
  39.         Scale(self, length=150,orient=HORIZONTAL,sliderlength=25,
  40.             label="Fréquence en Hz :", from_=1, to=9, tickinterval=2,
  41.             resolution=0.25,showvalue=0,
  42.             command=self.setFrequency).pack(side=LEFT,pady=5)
  43.  
  44.         Scale(self, length=150,orient=HORIZONTAL,sliderlength=15,
  45.             label="Phase en degrés :", from_=-180, to=180, tickinterval=90,
  46.             showvalue=0,command=self.setPhase).pack(side=LEFT,pady=5)
  47.  
  48.         Scale(self, length=150,orient=HORIZONTAL,sliderlength=15,
  49.             label="Apmlitude :", from_=-2, to=10, tickinterval=2,
  50.             showvalue=0,command=self.setAmplitude).pack(side=LEFT,pady=5)
  51.  
  52.     def setCurve(self):
  53.         self.master.event_generate("<Control-Z>")
  54.        
  55.     def setFrequency(self,f):
  56.         self.freq=float(f)
  57.         self.master.event_generate("<Control-Z>")
  58.        
  59.     def setPhase(self,p):
  60.         pp=float(p)
  61.         self.phase=pp*2*pi/360           #converson degrés radians
  62.         self.master.event_generate("<Control-Z>")
  63.  
  64.     def setAmplitude(self,a):  
  65.         self.ampl=float(a)
  66.         self.master.event_generate("<Control-Z>")  
  67.  
  68.  
  69. ## Classe Principale
  70.  
  71.  
  72. class ShowVibra(Frame):
  73.     """Démonstration de mouvements vibratoires harmoniques"""
  74.     def __init__(self, boss=None):
  75.             Frame.__init__(self)        # Constructeur de la classe parente
  76.             self.couleur=["green","yellow","orange"]       
  77.             self.trace=[0]*3            #liste des tracés (courbes à dessiner)
  78.             self.controle=[0]*3         # liste des panneaux de contrôle
  79.  
  80.  
  81.             # Instanciation du canevas des axes X et Y
  82.             self.gra=OscilloGrapheBis (self, larg=1500, haut=400)
  83.             self.gra.configure(bg="grey40",bd=3,relief=SUNKEN)
  84.             self.gra.pack(side=TOP, pady=3)
  85.  
  86.  
  87.             # Instanciation de 3 panneaux de contrôle (curseurs)
  88.             for i in range(3):
  89.                 self.controle[i]=ChoixVibra(self, self.couleur[i])
  90.                 self.controle[i].configure(bd=3,relief=GROOVE)
  91.                 self.controle[i].pack(padx=10,pady=3)
  92.  
  93.             # Designation de l'évènement qui déclenche l'affichage des tracés
  94.  
  95.             self.master.bind("<Control-Z>",self.montreCourbes)
  96.             self.master.title("Mouvements vibratoires harmoniques")
  97.             self.pack()
  98.    
  99.  
  100.     def montreCourbes(self,event):
  101.         """ Affichage de trois graphiques élongation/temps"""
  102.         for i in range(3):
  103.  
  104.             # d'abord effacer le tracé éventuel précédent
  105.             self.gra.delete(self.trace[i])
  106.  
  107.             # Ensuite dessiner le nouveau tracé:
  108.             if self.controle[i].chk.get():
  109.                 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)
  110. ##### code pour tester la classe #####
  111.  
  112. if __name__=="__main__":
  113.     ShowVibra().mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement