import time,random from tkinter import* tk=Tk() canvas = Canvas(tk, width=1000, height=500, bg="white") canvas.pack() #各図形の座標を管理する position=[] #図形を作り、作られた座標を返す関数 def Create(): xr=random.random()*1000 yr=random.random()*500 canvas.create_oval(xr-10,yr-10,xr+10,yr+10,fill="red") #作られた図形の座標を記憶するリスト posit=[xr,yr] return posit #図形を動かす関数 引数:ID = 動かす図形の番号 def Move(ID): global position dx=10-random.random()*20 dy=10-random.random()*20 position[ID-1][0]+=dx #現在動かす図形のx座標を更新 position[ID-1][1]+=dy #現在動かす図形のy座標を更新 canvas.move(ID,dx,dy)   #動かした図形の座標がcanvasのwidth(x座標)以上なら反対の位置に移動させる if position[ID-1][0]>1000: position[ID-1][0]-=1000 canvas.move(ID,-1000,0)   #動かした図形の座標がcanvasのwidth(x座標)以上なら反対の位置に移動させる elif position[ID-1][0]<0: position[ID-1][0]+=1000 canvas.move(ID,1000,0) #動かした図形の座標がcanvasのheight(y座標)以上なら反対の位置に移動させる if position[ID-1][1]>500: position[ID-1][1]-=500 canvas.move(ID,0,-500) #動かした図形の座標がcanvasのheight(y座標)以下なら反対の位置に移動させる elif position[ID-1][1]<0: position[ID-1][1]+=500 canvas.move(ID,0,500) #作る図形の数を決めさせる num=int(input("How many")) #図形を作成 for x in range(num): position.append(Create()) while True: for y in range(num): Move(y+1,position[y])#リストやfor文は「0」から始まるがcanvasのIDは「1」から始まるので注意 time.sleep(0.05) tk.update()