IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

Plusieurs problèmes pour l'effet Doppler via Tkinter


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut Plusieurs problèmes pour l'effet Doppler via Tkinter
    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

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    Un ami me dit de changer les string var en int var, mais je ne comprend pas pourquoi.
    J'ai vu sur un site que:
    v = IntVar() # Mémorise un entier; sa valeur par défaut est 0
    v = StringVar() # Mémorise une chaîne de caractères; sa valeur par défaut est ''
    cela veut-il donc dire que comme j'ai mis StringVar, je manipule une chaine de caractères et par conséquent je suis hors sujet?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    l'erreur que l'ont obtient quand on quitte le programme est la suivante:
    TclError: invalid command name ".51311344"
    mais je ne vois absolument pas ce chiffre dans le programme

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Mai 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2019
    Messages : 4
    Par défaut
    J'ai oublié de vous dire que je travail sur Edupython (la version 2.6 si je me souviens bien).

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Salut,

    Citation Envoyé par Guim0ve Voir le message
    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.
    Si vous voulez changer/lier le déplacement par intervalle de temps en fonction de ce qui a été choisi dans le Scale, il suffit d'écrire Canevas.move(rond, -valeur.get() ,0), valeur étant le IntVar passé en Variable du Scale correspondant.

    quand nous quittons la fenêtre Qui permet d'afficher le résultat de notre projet (incomplet), un message d'erreur nous parviens.
    Quand la fenêtre principale est détruite, tous les widgets sont détruits sans que vous sortiez du "while" et le prochain accès au Canvas sortira une erreur.
    Il faut un peu revoir la logique de votre programme.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Plusieurs problèmes pour mon "Application" Tkinter
    Par Nicolas853 dans le forum Tkinter
    Réponses: 6
    Dernier message: 04/01/2019, 15h05
  2. [XL-2007] Problèmes pour créer un TCD via VBA
    Par pétrin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/08/2014, 16h14
  3. [POV-Ray] Problème pour réfracter la lumière via la lentille
    Par jeroman dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 30/08/2011, 19h10
  4. Réponses: 1
    Dernier message: 03/01/2011, 15h19
  5. Réponses: 4
    Dernier message: 12/12/2006, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo