1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
| from tkinter import *
import time
fenetre=Tk() #Création de la fenêtre principale
fenetre.geometry('2000x900') #Taille de la fenêtre principale
fenetre.title('Effet Doppler') #Titre de la fenêtre principale
fenetre.winfo_width()
Valeur0 = StringVar()
Valeur1 = StringVar()
def Calculs(fe,v):
"""Permet de calculer la fréquence reçu par le récepteur"""
c=340
fr1=Valeur0*(1+Valeur1/c)
fr2=Valeur0*(1-Valeur1/c)
res.append(fr1)
res.append(fr2)
if Valeur0 < 600:
res.append(fr1)
if Valeur0 >= 600:
res.append(fr2)
return res
def resolution():
"""Permet de lier les boutons avec la fonction de calcul"""
if R.cget('text')=='Calculer fr':
E.config(state=NORMAL)
fe=float(Valeur0.get())
v=float(Valeur1.get())
S=Calculs(fe,v)
global D
D=Label(fenetre,text=S[0])
D=Label(fenetre,text=S[0])
D.place(x=220,y=70)
if S[0] < 600:
Z.config(text="")
if S[0] >= 600:
Z.config(text="")
def effacer():
"""Permet d'effacer le résultat obtenu"""
can.delete('all')
E.configure(state=DISABLED)
D.config(text=" ")
Z.config(text=" ")
#Création d'un widget Canvas
Canevas = Canvas(fenetre,width="1200",height="350",bg ='white') #Créer un canevas dans la fenétre Tkinter
Canevas.focus_set()
Canevas.pack(padx=10,pady=10)
#Création d'un Label pour afficher la vitesse et la fréquence émise
AffichageFe = Label(fenetre, textvariable = Valeur0, width=70) #Afficher la valeur de la fréquence émise par rapport au widget Scale
AffichageV = Label(fenetre, textvariable = Valeur1, width=70) #Afficher la valeur de la vitesse de l'émetteur par rapport au widjet Scale
#Initialisation des buttons
R=Button(fenetre, text="Calculer fr",width=12,command=Calculs) #Bouton Calculer fr
E=Button(fenetre, text="Effacer",width=12, state=DISABLED,command=effacer) #Bouton Effacer
Q=Button(fenetre, text="Quitter",width=12,command=fenetre.destroy) #Bouton Quitter
#Initialisation des textes
Vitesse=Label(fenetre,text="vitesse =")
FrequenceE=Label(fenetre,text="fréquence émise Hz=")
FrequenceR=Label(fenetre,text="fréquence reçue =")
c=Label(fenetre,text="c= 340 m/s")
def maj(nouvelleValeur):
# nouvelle valeur en argument
print(nouvelleValeur)
def plus():
Valeur.set(str(int(Valeur.get())+10))
print(Valeur.get())
def moins():
Valeur.set(str(int(Valeur.get())-10))
print(Valeur.get())
Valeur0.set(0)
Valeur1.set(0)
#Création d'un widget Scale
echelleFe = Scale(fenetre,from_=400,to=1000,resolution=1,orient=HORIZONTAL,\
length=2000,width=20,label="Fréquence de l'émetteur émis en Hz",tickinterval=100,variable=Valeur0,command=maj)
echelleFe.pack(padx=10,pady=25)
echelleV = Scale(fenetre,from_=0,to=200,resolution=1,orient=HORIZONTAL,\
length=2000,width=20,label="Vitesse émetteur en m/s",tickinterval=10,variable=Valeur1,command=maj)
echelleV.pack(padx=10,pady=25)
#Initialisation des cases de texte
Z=Label(fenetre,text='')
#Initialisation des coordonnées des différents éléments du programme
Z.place(x=220,y=70)
Vitesse.place(x=90,y=35)
FrequenceE.place(x=90,y=50)
FrequenceR.place(x=90,y=70)
c.place(x=90,y=20)
Q.place(x=290,y=370)
E.place(x=190,y=370)
R.place(x=90,y=370)
AffichageV.place(x=-95,y=35)
AffichageFe.place(x=-30,y=50)
#Création des coordonnées des figures
x1=0
y1=210
x2=100
y2=90
#Création d'un objet graphique
rond = Canevas.create_oval(0,200,100,100,fill='pink') #Le cercle rose représente l'émetteur
Recepteur=Canevas.create_rectangle(900,450,950,500,fill='black') #Le carré noir représente le récepteur
Rond2=Canevas.create_oval(x1, y1, x2, y2) #Le cercle gris représente l'onde émise
#Algo déplacement de l'émetteur et de l'onde
x = 0
while 1:
#Modification des coordonnées des figures #Création d'une boucle
x1=x1-5
y1=y1+5
x2=x2+10.5
y2=y2-5
if x == 1100: #Boucle conditionnel sur les coordonnées de l'émetteur(cercle rose)
a = False
if x == 0:
a = True
if (a):
Canevas.delete(Rond2) #Supprime l'onde(cercle transparent)
Rond2=Canevas.create_oval(x1,y1,x2,y2) #Recréer l'onde avec les coordonnées modifier
Canevas.move(rond,10,0) #Déplace l'émetteur sur l'axe X(vers la droite)
x += 10
else:
Canevas.delete(Rond2) #Si l'émetteur atteint le bord du Canevas,supprime l'onde
Canevas.move(rond,-10,0) #Si l'émetteur atteint le bord du Canevas,deplace l'émetteur sur la gauche
x -= 10
time.sleep(0.1) #Réactive cette boucle toutes les 0,1 secondes
Canevas.update() #Re-actualise la page afin d'afficher les figure au coordonnées modifier
fenetre.mainloop() |
Partager