Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1780 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  programme spirographe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

programme spirographe

n°1993095
crapette2
Posté le 14-05-2010 à 17:18:18  profilanswer
 

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. # ==============================================================================

mood
Publicité
Posté le 14-05-2010 à 17:18:18  profilanswer
 

n°1993131
Sve@r
Posté le 14-05-2010 à 19:24:17  profilanswer
 

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.
n°1993137
crapette2
Posté le 14-05-2010 à 19:54:57  profilanswer
 

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!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  programme spirographe

 

Sujets relatifs
Une manière plus propre pour rendre un programme invisible?Lancement programme externe via php
programme qui marche puis qui ne marche plus ??executer un programme externe sous php
Programme sommeLire et écrire dans un fichier Excel avec un programme c++
Aide pour un programme en C/C++ (compression en rar)Programme de saisie
trouver un programme en c qui lit des codes provenant d'un interface j[pascal] programme pascal qui transforme "123" en "102030" résolu
Plus de sujets relatifs à : programme spirographe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR