我有以下代码,它试图创建另外两个不同颜色和不同位置的Ball类实例。目前,创建椭圆并指定其位置的方法位于 init 方法中。
问题:我曾尝试创建ball2和ball3(创建类Ball的实例),但它们没有用。由于显而易见的原因,他们覆盖了ball1。
我正在寻求一些有关答案(代码)的最佳解决方案的建议
最好直接从现在的位置调用方法,如果是这样,怎么办? (我尝试了各种不起作用的东西)。
否则,创建一种新的绘制球的方法是否更加pythonic或高效,如果是这样,你能否提供这个作为答案。
答案理想情况下包含上述内容,以及解释或任何其他替代方案(如果有)。
以下代码
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')
例如,尝试将其移动到我尝试过的方法中,但没有运气:
def moveball(x_position,y_position):
self.canvas.move(self.id,0,0)
ball3=Ball(canvas,'purple')
ball3.moveball(100,100)
错误:
ball3.moveball(100,100)
TypeError: moveball() takes 2 positional arguments but 3 were given
答案 0 :(得分:1)
为防止出现错误,您需要添加self
作为moveball
的参数,如果它在您的球类中。 (这需要是第一个参数)
你的球不会互相“覆盖”,它们只是按照你创建它们的顺序在画布上相互显示。
您可以通过在创建后移动它们(指定x和y数量)或通过传递初始坐标(x1,y1,x2,y2或x,y然后使用偏移量)来阻止这种情况。
答案 1 :(得分:0)
刚发现这个,确实有效。显然会等着看是否有人提出更好或更有效的方法。
创建以下方法:
def move(self,x,y): #we have created the draw method but it doesn't do anything yet.
canvas.move(self.id,x,y)
像这样调用ball3:
ball3.move(100,200)
如问题所示,这会在另一个位置向屏幕产生另一个球。