J'ai le code suivant qui cherche à créer 2 instances de plus de la classe Ball, de différentes couleurs et à différents endroits. Actuellement, la méthode qui crée l'ovale et spécifie sa position est dans la méthode init.meilleur moyen d'appeler une méthode d'une classe pour changer l'emplacement tkinter classes python
Problème: J'ai essayé de créer ball2 et ball3 (en créant des instances de la classe Ball) mais cela n'a pas fonctionné. Ils écrasent ball1, pour des raisons évidentes.
Je suis après quelques suggestions pour la meilleure solution avec une réponse (code)
Est-il préférable d'appeler la méthode directement à partir de là où il est maintenant, et si oui, comment? (J'ai essayé diverses choses qui n'ont pas fonctionné). Sinon, est-ce plus pythonique ou efficace de créer une nouvelle méthode pour dessiner la balle, et si oui, pourriez-vous fournir cela comme une réponse.
Une réponse devrait idéalement contenir à la fois ce qui précède, avec des explications ou d'autres alternatives, le cas échéant.
code ci-dessous
class Ball: #create a ball class
def __init__(self,canvas,color): #initiliased with the variables/attributes self, canvas, and color
self.canvas=canvas #set the intiial values for the starting attributes
self.id=canvas.create_oval(30,30,50,50,fill=color) #starting default values for the ball
""" Note: x and y coordinates for top left corner and x and y coordinates for the bottom right corner, and finally the fill colour for the oval
"""
self.canvas.move(self.id,0,0) #thia moves the oval to the specified location
def draw(self): #we have created the draw method but it doesn't do anything yet.
pass
ball1=Ball(canvas,'green') #here we are creating an object (green ball) of the class Ball
ball2=Ball(canvas,'blue')
ball3=Ball(canvas,'purple')
Par exemple, pour essayer de le déplacer dans une méthode que j'ai essayé, mais sans succès:
def moveball(x_position,y_position):
self.canvas.move(self.id,0,0)
ball3=Ball(canvas,'purple')
ball3.moveball(100,100)
Erreur:
ball3.moveball(100,100)
TypeError: moveball() takes 2 positional arguments but 3 were given
Quel est exactement le problème que vous essayez de résoudre ici? S'il vous plaît voir http://xyproblem.info/ –
J'ai modifié la question pour inclure le problème plus clairement. Les balles 2 et ball3 (instances) écrasent ball1.Je cherche une solution à ce problème de la manière la plus efficace - soit d'appeler l'attribut dans la classe __init__, soit de réparer ma tentative de créer une autre méthode, ce qui ne fonctionne pas (voir modifier) – MissComputing