programme spirographe

programme spirographe - Python - Programmation

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

Bonjour,
pour un projet je dois faire un programme qui effectue un tracé de trochoides (équivalent du spirographe). j'ai réussi à faire un programme très simple, mais je dois le réaliser avec des classes et je n'arrive pas à "relier" les classes entre elles. Etant débutante en python,je n'ai pas de grandes connaissances sur les classes et je recherche donc quelques conseils.
Merci d'avance pour vos réponses.  
 

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

Reply

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

Reply

Marsh Posté le 14-05-2010 à 19:24:17    

crapette2 a écrit :

Bonjour,
pour un projet je dois faire un programme qui effectue un tracé de trochoides (équivalent du spirographe). j'ai réussi à faire un programme très simple, mais je dois le réaliser avec des classes et je n'arrive pas à "relier" les classes entre elles. Etant débutante en python,je n'ai pas de grandes connaissances sur les classes et je recherche donc quelques conseils.


 
Qu'entends-tu par "relier" les classes ? Les classes ne se relient pas ensembles.
 
Faut voir une classe comme un type. T'as le type int, le str, le tuple, et la classe.
la différence toutefois c'est qu'une classe peut embarquer avec elles des variables internes. Et ces variables peuvent elles-aussi être int ou d'une autre classe. Et etc etc etc...
 
Exemple: une classe toto et une classe titi qui l'embarque
 

Code :
  1. class toto:
  2.    def __init__(self, valeur):
  3.        self.valeur=valeur
  4.  
  5. class titi:
  6.    def __init__(self, valeur):
  7.        self.variable=toto(valeur)
  8.  
  9. a=titi(10)
  10. print a.variable.valeur



---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 14-05-2010 à 19:54:57    

Merci pour ta réponse. Je m'étais en effet mal exprimée, je voulais juste récupérer certaines valeurs dans une classe pour les utiliser dans une autre.
Je vais essayer avec ton exemple, ça me semble déjà plus clair.
merci!

Reply

Sujets relatifs:

Leave a Replay

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