Python 如何在Tkinter中以不同的速度设置球的动画?
这是我目前掌握的代码。我似乎无法解决的问题是,我需要球以不同的速度移动,而且大小也不同。我需要做的最后一步是让球从底部回到顶部。因此,最终产品应该是多种尺寸的球,以不同的速度移动到画布顶部,然后出现在底部。谢谢你的帮助 一种解决方案是创建一个表示一个球的自定义类。让代码将球移动到该类中。每个球都有自己的速度和方向 下面是一个非常简单的球落地的例子。您需要为反弹、朝不同方向下落等添加逻辑Python 如何在Tkinter中以不同的速度设置球的动画?,python,canvas,tkinter,tk,Python,Canvas,Tkinter,Tk,这是我目前掌握的代码。我似乎无法解决的问题是,我需要球以不同的速度移动,而且大小也不同。我需要做的最后一步是让球从底部回到顶部。因此,最终产品应该是多种尺寸的球,以不同的速度移动到画布顶部,然后出现在底部。谢谢你的帮助 一种解决方案是创建一个表示一个球的自定义类。让代码将球移动到该类中。每个球都有自己的速度和方向 下面是一个非常简单的球落地的例子。您需要为反弹、朝不同方向下落等添加逻辑 import time, random from tkinter import * class Box( F
import time, random
from tkinter import *
class Box( Frame ):
def __init__( self ): # __init__ runs when Box() executes
Frame.__init__( self ) # Frame is the top level component
self.pack()
self.master.title( "Canvas animation" )
self.master.geometry( "400x400" ) # size in pixels
label = Label(self, text=" Bubbles ")
label.grid(row=1, column=1)
# create Canvas component
self.myCanvas = Canvas( self )
self.myCanvas.grid(row=2, column=1)
self.myCanvas.config(bg = 'cyan', height = 350, width = 350)
self.balls = [] #list of balls belongs to the Box
self.paint()
self.animate()
def paint( self ):
#create a list of balls
for i in range(35):
x1, y1 = random.randint(35,315), random.randint(35,315)
x2, y2 = x1 + 30 , y1 + 30 #size
ballObjectId = self.myCanvas.create_oval\
( x1, y1, x2, y2, fill = '')
self.balls.append([ballObjectId, x1, y1])
self.myCanvas.update()
print ("paint done")
def animate( self ):
#animate the list of balls
for i in range(1000):
for i in range(len(self.balls)):
self.myCanvas.delete(self.balls[i][0]) #delete and redraw to move
self.balls[i][1] += random.randint(-2,2) #change coordinates
self.balls[i][2] += random.randint(-10,0)
x1, y1 = self.balls[i][1], self.balls[i][2]
x2, y2 = x1 + random.randint(30,31) , y1 + random.randint(30,31)
self.balls[i][0]=(self.myCanvas.create_oval\
( x1, y1, x2, y2, fill = ''))
self.myCanvas.update()
def main():
Box().mainloop()
if __name__ == "__main__":
main()
您可以将其与以下内容一起使用:
class Ball(object):
def __init__(self, canvas, x=10, y=10, radius=10, color="red", speed=1):
self.canvas = canvas
self.speed = speed
self.canvas_id = canvas.create_oval(x-radius, y-radius, x+radius, y+radius,
outline=color, fill=color)
def move(self, on=True):
self.canvas.move(self.canvas_id, self.speed, self.speed)
paint()
和animate()
方法中的缩进错误。你的for
循环根本不起作用。只需在for
s下的for
循环中缩进一个选项卡,即可获得所有您想要的代码;该程序不会编译时出现缩进错误。这可能是因为将代码粘贴到问题中。
self.canvas = Canvas(...)
self.balls = []
for i in range(10):
<compute x, y, color, speed, ...>
ball = Ball(self.canvas, x, y, radius, color, speed)
self.balls.append(ball)
def animate(self):
for ball in self.balls:
ball.move()
self.canvas.after(30, self.animate)