Advertisement
ERENARD63

Show vibra

Jan 28th, 2019
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.15 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.         print("check setCurve")
  54.         self.master.event_generate("<Control-z>")
  55.        
  56.     def setFrequency(self,f):
  57.         print("check setFreq")
  58.         self.freq=float(f)
  59.         self.master.event_generate("<Control-z>")
  60.        
  61.     def setPhase(self,p):
  62.         print("check setPhase")
  63.         pp=float(p)
  64.         self.phase=pp*2*pi           #converson degrés radians
  65.         self.master.event_generate("<Control-z>")
  66.  
  67.     def setAmplitude(self,a):
  68.         print("check setAmplitude")
  69.         self.freq=float(a)
  70.         self.master.event_generate("<Control-z>")  
  71.  
  72.  
  73. ## Classe Principale
  74.  
  75.  
  76. class ShowVibra(Frame):
  77.     """Démonstration de mouvements vibratoires harmoniques"""
  78.     def __init__(self, boss=None):
  79.             Frame.__init__(self)        # Constructeur de la classe parente
  80.             self.couleur=["green","yellow","orange"]       
  81.             self.trace=[0]*3            #liste des tracés (courbes à dessiner)
  82.             self.controle=[0]*3         # liste des panneaux de contrôle
  83.  
  84.  
  85.             # Instanciation du canevas des axes X et Y
  86.             self.gra=OscilloGrapheBis (self, larg=1500, haut=400)
  87.             self.gra.configure(bg="grey40",bd=3,relief=SUNKEN)
  88.             self.gra.pack(side=TOP, pady=3)
  89.  
  90.  
  91.             # Instanciation de 3 panneaux de contrôle (curseurs)
  92.             for i in range(3):
  93.                 self.controle[i]=ChoixVibra(self, self.couleur[i])
  94.                 self.controle[i].configure(bd=3,relief=GROOVE)
  95.                 self.controle[i].pack(padx=10,pady=3)
  96.  
  97.             # Designation de l'évènement qui déclenche l'affichage des tracés
  98.  
  99.             self.master.bind("<Control-Z>",self.montreCourbes)
  100.             self.master.title("Mouvements vibratoires harmoniques")
  101.             self.pack()
  102.    
  103.  
  104.     def montreCourbes(self,event):
  105.         """ Affichage de trois graphiques élongation/temps"""
  106.         print("check1")
  107.         for i in range(3):
  108.  
  109.             # d'abord effacer le tracé éventuel précédent
  110.             self.gra.delete(self.trace[i])
  111.  
  112.             # Ensuite dessiner le nouveau tracé:
  113.             if self.controle[i].chk.get():
  114.                 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)
  115.  
  116. ##### code pour tester la classe #####
  117.  
  118. if __name__=="__main__":
  119.     ShowVibra().mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement