-2
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()
這是我到目前爲止的代碼。我似乎無法解決的問題是我需要球移動不同的速度,也有不同的大小。我需要做的最後一步是把球放到最上面,然後從底部回來。所以最終的產品應該是多種尺寸的球,以不同的速度前進到帆布頂部,然後出現在底部。謝謝你的幫助!如何在Tkinter中以變化的速度製作動畫球?
你在'paint()'和'animate()'方法中有錯誤的縮進。你的'for'週期根本不做任何事情。只需在一個選項卡中縮進所有代碼,您希望在'for'循環中執行'for'循環。 – BoltKey
'for'循環不會無所作爲;該程序將不會編譯縮進錯誤。這可能是將代碼粘貼到問題中。 – TigerhawkT3