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 :

Ecart-type de données Tkinter


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut Ecart-type de données Tkinter
    Bonjour,

    Je souhaiterais afficher en continu dans un widget (label) les valeurs obtenues via un convertisseur. Ces valeus doivent être 'lissés', je dois donc afficher le résultat de l'écart type réalisé sur 10 valeurs laissés en mémoire tampon, et cela en continu.

    J'ai réalisé ce code mais cela ne mesure pas la dispersions des valeurs.

    Cela m'affiche comme message d'erreur: 'int object is not callable', pour la ligne correspondant au calcul de ecart_type.

    Pourriez-vous m'aider?

    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
     
    def convert (event=None):
        global valueADC
        for i in range(10):
            val1= adc.read_adc(1, gain=GAIN)
            val2= []
            val2.append(val1)
            somme=sum(val2)
            N=10
            moyenne=somme/N
            ecart_type=sqrt((somme(val1-moyenne)**2)/N)
            valueADC.set(ecart_type)
            label9.after(100,ADC)
     
    root=Tk()
    Button(root,text="Donnee", command= convert)
    label9=Label(root, textvariable=valueADC)
     
    root=mainloop()

  2. #2
    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,

    somme est un entier (car le retour de sum(...) lui a été assigné).
    Donc somme(....) - les parenthèses font l'appel de fonction - ne peut pas dire autre chose que 'int object is not callable'.
    Pour le reste, le code que vous avez essayé d'écrire est incompréhensible probablement à cause d'indentations oubliées (mais pas que...).

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

  3. #3
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Bonjour,

    Merci pour votre retour.

    Finalement, dans un premier temps je calcul seulement la moyenne sur 10 valeurs acquises par le convertisseur. Partant de ce principe, je voudrais avoir dans ma variable de type liste les "10 valeurs renouvelées" c'est à dire retiré la plus ancienne valeur pour y ajouter la nouvelle valeur afin de pouvoir en paralléle mesurer la moyenne.


    Mais le probléme est comment faire pour supprimer à chaque tour de boucle la plus ancienne valeur acquise afin d'ajouter la nouvelle?

    Voici la portion de code que j'ai pu fair, mais je vous avoue que je reste bloqué...

    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
     
    def ADC (event=None):
        global valueADC, values
     
        for i in range(10): 
            vals = adc.read_adc(1, gain=GAIN)  
            values.append(vals)
            print('| {0:>6}  |'.format(vals))
            valueADCx= (sum (values)/len(values))
            valueADC.set(valueADCx)
     
        for i in range(10):
            values[i]= values[i-1]
            values[-1]=vals 
            '''valueADC= moyenne(values)'''
        print (valueADCx)
        label9.after(100,ADC)
     
    root=Tk
     
    bouton3=Button(root,text="Donnée", command= ADC, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
     
    valueADC=StringVar()
     
    label9=Label(root, textvariable=valueADC, width=12, height=2)
    label9.config(font=('arial', 15, 'bold'))
    label9.grid(row=2, column=2)
    root=mainloop()
    Merci d'avance.

    Cordialement.

  4. #4
    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 Cerise22 Voir le message
    Finalement, dans un premier temps je calcul seulement la moyenne sur 10 valeurs acquises par le convertisseur. Partant de ce principe, je voudrais avoir dans ma variable de type liste les "10 valeurs renouvelées" c'est à dire retiré la plus ancienne valeur pour y ajouter la nouvelle valeur afin de pouvoir en paralléle mesurer la moyenne
    Vos explications en français ne sont pas plus claires que votre code.
    Vous récupérez 10 nouvelles valeurs toutes les 100 ms.
    Pour remplacer les anciennes valeurs, initialiser la liste values à vide suffit.

    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        for i in range(10): 
            vals = adc.read_adc(1, gain=GAIN)  
            values.append(vals)
            print('| {0:>6}  |'.format(vals))
            valueADCx= (sum (values)/len(values))
            valueADC.set(valueADCx)
    Inutile d'avoir les 2 dernières lignes dans le block "for": vous ne verrez s'afficher que la dernière ligne dans label9.

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

  5. #5
    Membre confirmé
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Par défaut
    Désolé pour mon expression écrite... pas facile d'expliquer mon probléme.

    Concernant mon programme: Je ne veux pas remplacer toutes les anciennes valeur mais seulement une seule, la plus ancienne.

    Je pense utiliser la méthode slice, une méthode qui permet de remplacer des valeurs d'une list par tranche. Et je pense pouvoir arrivé à la solution...

    Par exemple:

    values [0:9]
    X[1:10]= values
    values[0:1]= vals #on ajoute à la liste ,à la position 0, la nouvelle acquisition de valeur du convertisseur.

    Je pense être dans la bonne voie, à votre avis?

    Merci.

  6. #6
    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
    Citation Envoyé par Cerise22 Voir le message
    Désolé pour mon expression écrite... pas facile d'expliquer mon probléme.

    Concernant mon programme: Je ne veux pas remplacer toutes les anciennes valeur mais seulement une seule, la plus ancienne.
    La deuxième fois que le callback ADC sera appelé, vous aurez 10 valeurs "anciennes" et 10 nouvelles valeurs.
    Admettons que la plus ancienne soit celle d'index 0, vous ne pourrez la remplacer (si cela à du sens) que par une seule des nouvelles valeurs.
    Si vous n'arrivez pas à exprimer ce que vous voulez faire en bon français, vous coderez peut être un truc qui fonctionne mais pas sur que çà fasse ce qui est attendu.

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Type pour données de type email avec @
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/01/2004, 14h50
  2. Types de données interbase
    Par Clotilde dans le forum InterBase
    Réponses: 2
    Dernier message: 18/11/2003, 14h10
  3. Réponses: 2
    Dernier message: 22/09/2003, 11h23
  4. Convertir un type de donnée sous SQL Server
    Par Fleep dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/08/2003, 15h15
  5. Réponses: 2
    Dernier message: 01/04/2003, 22h09

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