Bonjour, bonsoir

Je demande votre aide, s'il vous plait.
Plusieurs fois que je change les codages afin de faire quelque chose de décent.

Je suis dans un groupe d'ISN (ma première année, donc je ne comprend pas tout sans explications) et je suis en charge des widgets scale et de tout ce qui est lié à ces widgets.
Cependant je rencontre de LARGES difficultés à trouver comment faire en sorte qu'un widget scale puisse influencer sur la vitesse de l'animation de l’émetteur que mon collègue a fait.

De plus le calcul de la fréquence reçue ne s'affiche pas bien que nous pensions avoir bien fait cette partie (nous avons vérifié plusieurs fois le problème possible qui aurait pu ne pas afficher la fréquence reçue, en vain).
Il y'a également un troisième problème, qui nous sembles mineur:
quand nous quittons la fenêtre Qui permet d'afficher le résultat de notre projet (incomplet), un message d'erreur nous parviens.
sur ce point là, nous pensons que ça n'affecte absolument pas le projet mais je me demande vraiment pourquoi il y'a ce problème.

A l'heure actuelle je fait encore des recherches via internet pour me renseigner, afin de corriger ses erreurs, cependant étant le seul de mon groupe a vouloir corriger ces erreurs (car notre professeur nous avez préciser que le projet n'avait pas besoin d'être fini) mes recherches n'aboutisses à rien. j'ai rechercher sur plusieurs site mais aucun ne me dit comment faire pour régler tels problèmes.

voici le projet en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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()
* ce que j'ai déjà essayé de faire pour résoudre le problème de l'animation:
j'ai déjà essayé de changer
la ligne 157 et 161
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Canevas.move(rond,10,0)
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Canevas.move(echelleV,10,0)
pour qu'il y'ai connection entre le widget scale de la vitesse avec l'animation
pareil pour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Canevas.move(rond,-10,0)
que j'ai changé par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Canevas.move(rond,-echelleV,0)
cependant cela ne marche pas
donc j'ai essayé d'échanger echelleV avec Valeur1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Canevas.move(rond,-Valeur1,0)  et  Canevas.move(rond,-Valeur1,0)
mais ça ne marche toujours pas (ce qui devrait être logique avec le message d'erreur qui suit si on essaie de démarrer le projet, mais je ne comprend toujours pas)

*pour afficher la fréquence reçue je voulais faire en sorte que les widgets scale de la Fréquence émise et de la vitesse puissent faire le calcul, j'ai donc fait plusieurs essais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
v=[ ]
c=340
fe=[ ]
def Rapprochement():
    fr=fe*(1+v/c)
def Eloignement():
    fr=fe*(1-v/c)
que j'avais changer en:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
v=Valeur0
c=340
fe=Valeur1
def Rapprochement():
    fr=fe*(1+v/c)
 
def Eloignement():
    fr=fe*(1-v/c)
Ce qui ne marché toujours pas.
Cependant un de mes collègue à proposer de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
Ce qui lui paraissait plus logique.

Voila, basiquement, notre projet est très incomplet.

J'aimerais bien que vous m'aidiez ne serais-ce qu'un peu, d'une manière compréhensible pour un élève qui termine première année d'ISN.

Merci d'avance si vous le faites
je continus mes recherches de mon côté afin de vous tenir au courant si une idée interessante pourrais surgir afin d'améliorer le projet.


Cordialement, Mr. Guim0ve