problème à la compilation

problème à la compilation - Python - Programmation

Marsh Posté le 16-05-2010 à 11:06:13    

Bonjour,
 
lorsque je compile mon programme de tracé de trochoides, j'obtiens cette erreur:
  File "C:\Users\Chris\Desktop\spiro2.py", line 95, in fonction
    color = cb_color()
NameError: global name 'cb_color' is not defined
 
et je ne comprends pas du tout pourquoi cb_color n'est pas (ou mal) défini.  
c'est surement une erreur assez bête mais je n'arrive pas à la trouver, si vous pouviez m'aider ce serait très sympa.
Merci d'avance
 

Code :
  1. # ==============================================================================
  2. # Tracé de Trochoïdes
  3. # ==============================================================================
  4. """Tracé de trochoïdes"""
  5. __author__  = "Gaëlle Conte"
  6. __version__ = "1.0"
  7. __date__    = "mai 2010"
  8. # ------------------------------------------------------------------------------
  9. from Tkinter import *
  10. from tkFont import Font
  11. import math
  12. import tkColorChooser
  13. #-------------------------------------------------------------------------------
  14. class debut():
  15.   """crée l'affichage du jeu"""
  16.   def __init__(self):
  17.     self.root
  18.  
  19.   global root
  20.   root = {0: Tk()}
  21.   # ----------------------------------------------------------------------------
  22.   root[1] = Frame(root[0])
  23.   root[1].pack(side=TOP, fill=BOTH)
  24.   root[11] = Frame(root[1])
  25.   root[11].pack(side=LEFT, fill=BOTH)
  26.   root[12] = Canvas(root[1], bg='white',width=500, height=500, relief=SOLID, border=3)
  27.   root[12].pack(side=LEFT, fill=BOTH, expand=YES)
  28. # ------------------------------------------------------------------------------
  29. class choix_util(): 
  30.   def __init__(self,x,y):
  31.     self.x = x
  32.     self.y = y
  33.   root[111]= Frame(root[11])
  34.   root[111].pack(side=TOP, fill=BOTH,pady=5)
  35.   root[1111]=Frame(root[111])
  36.   root[1111].pack(side=LEFT,fill=BOTH,pady=5)
  37.   root[11111]=Label(root[1111],text='position de x')
  38.   root[11111].pack(side=TOP, fill=BOTH,pady=5)
  39.   root[11112] = Scale(root[1111], orient=HORIZONTAL, to=400)
  40.   root[11112].pack(side=TOP, fill=BOTH, expand=YES)
  41.   root[1112]=Frame(root[111])
  42.   root[1112].pack(side=LEFT,fill=BOTH,pady=5)
  43.   root[11121]=Label(root[1112],text='position de y')
  44.   root[11121].pack(side=TOP, fill=BOTH,pady=5)
  45.   root[11122] = Scale(root[1112], orient=HORIZONTAL, to=400)
  46.   root[11122].pack(side=TOP, fill=BOTH, expand=YES)
  47.   # ----------------------------------------------------------------------------
  48.   root[112] = Label(root[11], text='rayon de cercle fixe (1-100)')
  49.   root[112].pack(side=TOP, fill=BOTH,pady=5)
  50.   root[113] = Scale(root[11], orient=HORIZONTAL,from_=1, to=100)
  51.   root[113].pack(side=TOP, fill=BOTH, expand=YES)
  52.   root[114] = Label(root[11], text='deplacement du rayon du cercle (1-100)')
  53.   root[114].pack(side=TOP, fill=BOTH)
  54.   root[115] = Scale(root[11], orient=HORIZONTAL, from_=1, to=100)
  55.   root[115].pack(side=TOP, fill=BOTH, expand=YES)
  56.   root[116] = Label(root[11], text='deplacement de compensation du cercle (1-100)')
  57.   root[116].pack(side=TOP, fill=BOTH)
  58.   root[117] = Scale(root[11], orient=HORIZONTAL, from_=1, to=100)
  59.   root[117].pack(side=TOP, fill=BOTH, expand=YES)
  60.   x = root[11112].get()
  61.   y = root[11122].get()
  62. # ------------------------------------------------------------------------------
  63. class spiro():
  64.   """Zone de dessin"""
  65.   global color
  66.  
  67.   # ----------------------------------------------------------------------------
  68.   def __init__(self,x,y):
  69.     self.pos_x = choix_util(x)
  70.     self.pos_y = choix_util(y)
  71.   # ------------------------------------------------------------------------------
  72.   def cb_color(self, val=None):
  73.     """permet à l'utilisateur de choisir la couleur de la courbe"""
  74.     val=tkColorChooser.askcolor()
  75.     return val
  76.  
  77.   # ----------------------------------------------------------------------------
  78.   def fonction(self, pos=None):
  79.     """ """
  80.     #a = spiro(x)
  81.     #b = spiro(y)
  82.     x = root[11112].get()
  83.     y = root[11122].get()
  84.     color = cb_color()
  85.  
  86.     R, r, O = root[113].get(), root[115].get(), root[117].get()
  87.     if pos is None:
  88.       coords=[]
  89.       for t in range(500):
  90.         coords.append((R+r)*math.cos(t)-O*math.cos(((R+r)/r)*t)+x)
  91.         coords.append((R+r)*math.sin(t)-O*math.sin(((R+r)/r)*t)+y)
  92.       outside_curve=root[11].create_line(coords,fill=color,tag='line',activedash=(2,2))
  93.      
  94.     else:
  95.       coords=[]
  96.       for t in range(500):
  97.         coords.append((R-r)*math.cos(t)+O*math.cos(((R-r)/r)*t)+self.pos_x)
  98.         coords.append((R-r)*math.sin(t)-O*math.sin(((R-r)/r)*t)+self.pos_y)
  99.       inside_curve=root[11].create_line(coords,fill=color,tag='line',activedash=(2,2))
  100.      
  101.   # ------------------------------------------------------------------------------
  102.   def cb_delete():
  103.     """supprime tous les dessins dans la fenetre"""
  104.     root[11].delete(root[11],'line')
  105.   root[118] = Frame(root[11])
  106.   root[118].pack(side=TOP,fill=BOTH,expand=YES)
  107.   root[1181] = Button(root[118], text='déplacement intérieur',command = fonction(True))
  108.   root[1181].pack(side=LEFT, fill=BOTH, expand=YES,pady=5,padx=5)
  109.   root[1182] = Button(root[118], text='déplacement extérieur',command = fonction(False))
  110.   root[1182].pack(side=LEFT, fill=BOTH, expand=YES,pady=5,padx=5)
  111.   root[119] = Button(root[11], text= 'effacer', command=cb_delete)
  112.   root[119].pack(side=TOP, fill=BOTH,padx=5,pady=2)
  113.      
  114. # ==============================================================================
  115. if __name__ == '__main__': # testcode de la classe spiro
  116.   # ----------------------------------------------------------------------------
  117.   root=debut()
  118.   root.title('Trace de Trochoides')
  119.   root.protocol('WM_DELETE_WINDOW', root.quit)
  120.   root.minsize(root.winfo_width(), root.winfo_height())
  121.   root.resizable(1,1)
  122.   root.mainloop(); root.destroy()
  123. # ==============================================================================

Reply

Marsh Posté le 16-05-2010 à 11:06:13   

Reply

Marsh Posté le 16-05-2010 à 17:07:38    

Tu aimes bien les cross-posts avec developpez.net on dirait...
 
1. Comment fais-tu pour compiler?
2. File "C:\Users\Chris\Desktop\spiro2.py", line 95, in fonction : comment veux-tu qu'on voit la ligne 95?
3. Pourquoi ne commencer par réduire la portée du problème? Il n'est pas nécessaire de balancer 138 lignes qui polluent la lecture alors que seules 2 ou 3 lignes sont pertinentes! Ah oui, ça demande un peu d'effort de ta part.
 
Un indice : cb_color() sans paramètres n'est pas définie.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 16-05-2010 à 17:14:16    

Ce n'est pas que j'aime ça, c'est juste que c'est un projet que je dois rendre demain et que jusqu'à présent je n'ai pas réussi à trouver la solution. et si je n'ai pas réduit le code c'est justement pour que la personne qui voudrait bien m'aider puisse voir d'où vient le problème. je ne sais pas quelles lignes enlever puisque je ne sais pas d'où vient le problème.
pour compiler je ne sais pas trop, je me sers de idle donc j'ai juste à appuyer sur f5... (je suis débutante en programmation et je n'ai pas trop de connaissances dans ce domaine)
 
et c'est justement ton indice qui est mon problème. cb_color est censé être un nom de fonction donc je ne vois pas comment la définir autrement que comme une fonction.

Reply

Marsh Posté le 16-05-2010 à 17:16:35    

pour le File "C:\Users\Chris\Desktop\spiro2.py" c'est justement le code que j'ai donné. et la ligne 95 est
color=cb_color()

Reply

Marsh Posté le 16-05-2010 à 17:24:04    

crapette2 a écrit :

Ce n'est pas que j'aime ça, c'est juste que c'est un projet que je dois rendre demain et que jusqu'à présent je n'ai pas réussi à trouver la solution.


Mauvaise attitude, mais ce n'est de toute façon pas pertinent.
 

crapette2 a écrit :

et si je n'ai pas réduit le code c'est justement pour que la personne qui voudrait bien m'aider puisse voir d'où vient le problème. je ne sais pas quelles lignes enlever puisque je ne sais pas d'où vient le problème.


Justement, c'est ça le but de l'opération!
 

crapette2 a écrit :

pour compiler je ne sais pas trop, je me sers de idle donc j'ai juste à appuyer sur f5... (je suis débutante en programmation et je n'ai pas trop de connaissances dans ce domaine)


Tu n'as pas l'air de vraiment comprendre ce que tu fais. Et as-tu la volonté de comprendre si ton but n'est que de rendre ton projet pour demain?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed