アニメにマウスとキーボード_孫と遊ぶためのPython入門(10)

画面の図形をマウスやキーボードで動かし、returnで図形をボールが追いかけるコード。

【本日の気になるキーコード】
 canvas.bind('',move)
 canvas.bbox( )[0]
 canvas.tag_bind( )
 canvas.coords(id,x0,y0,xx,yy)
 event.keysym

##−−−−−本日のコード:マウスとキーボードで図形を動かすーーーーー
import tkinter
import time

# 四角を動かし円が追いかけるプログラム 
# yasui_swift_mouse_move_rectangle_0602.py
# key使用時は四角の移動にmoveを使う
# bindでkeyと連結:第1引数=グラフィックスのID、第2引数=X軸方向、第3引数=y軸方向
# keyでは、Left:<、Right:>、 up:△、down:▽
#  mouseでは四角を右クリックでつかみ移動する

root= tkinter.Tk()

canvas = tkinter.Canvas(root,width = 640,height = 480)
rectangle = canvas.create_rectangle(300,220,340,260,outline = '',fill = '#090')

def mouse_move(event):
________x = event.x
________y = event.y
________canvas.coords(rectangle,x-20,y-20,x+20,y+20)

canvas.tag_bind(rectangle,'',mouse_move)

def move( event):
________xp = canvas.bbox(rectangle)[0]
________yp = canvas.bbox(rectangle)[1]
________xa = canvas.bbox(oval)[0]
________ya = canvas.bbox(oval)[1]

________if xp - xa < 0:
________________q = -1
________else:
________________q = 1
________if yp - ya < 0:
________________r = -1
________else:
________________r = 1

________if event.keysym == 'Up':
________________canvas.move(rectangle,0,-step)
________elif event.keysym == 'Down':
________________canvas.move(rectangle,0,step)
________elif event.keysym == 'Left':
________________canvas.move(rectangle,-step,0)
________elif event.keysym == 'Right':
________________canvas.move(rectangle,step,0)

________if event.keysym == 'Return':
________________step1 = 1
________________step2 = 1
________________while step1 <= abs(xp-xa):
________________________time.sleep(0.005)
________________________canvas.move(oval,q,0)
________________________canvas.pack()
________________________canvas.update()
________________________step1 = step1 + 1
________________while step2 <= abs(yp-ya):
________________________time.sleep(0.01)
________________________canvas.move(oval,0,r)
________________________canvas.pack()
________________________canvas.update()
________________________step2 = step2 + 1
________else:
________________pass

step = 10
root.title ("図形の追従移動") #タイトルのオブジェクト

root.bind('',move) # Keyとmoveを連結

xx = 300
yy = 220
xa = 20
ya = 20

oval = canvas.create_oval(20,20,60,60,fill = "red")
canvas.pack()
root.mainloop()