Tkinter Canvas 消息绑定
主要思路是可以利用系统接收到键盘的消息,做出反应。例如,当发生按下右移键时,可以控制球往右边移动,例如,我们可以如下这样设计函数。
def ballMove(event):
canvas.move(1, 5, 0) # 假设移动5像素
在程序设计函数中对于按下右移键移动球可以如下这样设计。
def ballMove(event):
if event.keysym == 'Right':
canvas.move(1, 5, 0)
对于主程序而言需使用canvas.bind_all( )函数,执行消息绑定工作,它的写法如下。
canvas.bind_all('<KeyPress-Left>', ballMove) #左移键
canvas.bind_all('<KeyPress-Right>', ballMove) #右移键
canvas.bind_all('<KeyPress-Up>', ballMove) #上移键
canvas.bind_all('<KeyPress-Down>', ballMove) #下移键
上述函数主要是告知程序所接收到键盘的消息是什么,然后调用ballMove( )函数执行键盘消息的工作。
示例1
程序开始执行时,在画布中央有一个红球,可以按键盘上的向右、向左、向上、向下键,往右、往左、往上、往下移动球,每次移动5个像素。
from tkinter import *
import time
def ballMove(event):
if event.keysym == 'Left': # 左移 ################################
canvas.move(1, -5, 0)
if event.keysym == 'Right': # 右移
canvas.move(1, 5, 0)
if event.keysym == 'Up': # 上移
canvas.move(1, 0, -5)
if event.keysym == 'Down': # 左移
canvas.move(1, 0, 5)
tk = Tk()
tk.title("apidemos.com")
canvas = Canvas(tk,width=500, height=300) # 建立画布
canvas.pack()
canvas.create_oval(225,125,275,175,fill="red")
canvas.bind_all('<KeyPress-Left>',ballMove)
canvas.bind_all('<KeyPress-Right>',ballMove)
canvas.bind_all('<KeyPress-Up>',ballMove)
canvas.bind_all('<KeyPress-Down>',ballMove)
mainloop()
# tk.mainloop()
输出: