Partage
  • Partager sur Facebook
  • Partager sur Twitter

NameError: name is not defined

    22 avril 2016 à 12:46:11

    Bonjour,

    Je suis encore débutant en Python et je ne suis pas encore très à l'aise sur les classes.

    J'ai codé un programme qui mesure la température (grâce à un capteur de température, un ADC et une Raspberry Pi) et j'aimerai afficher la courbe de la température dans une interface graphique à l'aide du module Tkinter de Python.

    Mon erreur est assez courant je pense et proviens de la ligne où j'appelle une autre fonction dans la même classe. Comment appeler une fonction située dans la même classe ?

    Merci d'avance.

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import RPi.GPIO as GPIO
    import spidev
    import time
    from Tkinter import *
    
    #ouverture du bus SPI
    spi=spidev.SpiDev()
    spi.open(0,0)
    spi.max_speed_hz=7800000    #ne pas changer cette valeur
    
    #fonction qui lit la donnée de l'ADC
    def ReadChannel(channel):
        adc=spi.xfer([1,(8+channel)<<4,0])
        data=((adc[1]&3)<<8)+adc[2]
        return data
    
    class Courbe(Frame):
    
        MAX_WIDTH=800
        MAX_HEIGHT=600
    
        def __init__(self):     
            Frame.__init__(self, width=Courbe.MAX_WIDTH, height=Courbe.MAX_HEIGHT)
            x=0
            y=0
            while x<10:
                y=ReadChannel(0)  #lecture valeur température
                courbe.afficher(x,y)
                x=x+1
    
        def afficher (self,x,y):
            self.x=x
            self.y=y
            zero=Courbe.MAX_HEIGHT/2
            self.create_oval(x+2,zero+y+2,x+2*2,zero+y+2*2) #on dessine un point
        
    fenetre=Tk()
    courbe=Courbe()
    courbe.pak()
    fenetre.mainloop()

    Et voici mon erreur :

    Traceback (most recent call last):
      File "/home/pi/temp_sensor_interface.py", line 40, in <module>
        courbe=Courbe()
      File "/home/pi/temp_sensor_interface.py", line 30, in __init__
        courbe.afficher(x,y)
    NameError: global name 'courbe' is not defined
    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2016 à 12:59:17

      Bonjour, en fait je pense que tu fais la confusion entre l'objet et la classe. Ici tu vas pas appeler la méthode afficher d'un objet donc tu dois utiliser self

      self.afficher(x,y)



      • Partager sur Facebook
      • Partager sur Twitter

      NameError: name is not defined

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown