我通过以下方式将一个键绑定到我的画布:
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
现在,当按下那个键时我该怎么做,它会调用一个特定的动作,比如在画布上向上移动一个对象?
我通过以下方式将一个键绑定到我的画布:
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
现在,当按下那个键时我该怎么做,它会调用一个特定的动作,比如在画布上向上移动一个对象?
根据文档,您需要以下内容:
例子:
# Sample event handler
def handle_up_key(self, event):
self.canvas.focus_set()
# Do whatever else you want.
def __init__(self):
self.canvas.bind("<Key-Up>", self.handle_up_key)
self.canvas.bind("<KeyPress-Up>", ...)
self.canvas.bind("<KeyRelease-Up>", ...)
# And so for any key you want to map.
更多信息:
每当您单击例如字母时,您都可以通过指定新坐标W
来执行此操作。
在这里您可以找到画布对象支持的方法。有一个叫做coords
,它允许你通过它指定一个对象的坐标ID
。ID 是创建对象时返回的值,例如,创建oval
:
oval_id = canvas.create_oval(x1, y1, x2, y2)
ID 是唯一的,因此您可以使用它们专门移动一个对象。例如,您可以使用移动椭圆的方法bind_all
点击某个字母(例如)。w
以下是一个完整的工作示例(我讨厌使用global
,但在这种情况下,为了简单起见,我使用它):
try:
import tkinter as tk # using Python 3
except ImportError:
import Tkinter as tk # using Python 2
def move(event=None):
global x1, x2, y1, y2, oval
if event.char == 'w':
y1 -= 10
y2 -= 10
oval = (x1, y1, x2, y2)
canvas.coords(oval_id, oval)
m = tk.Tk()
canvas = tk.Canvas(m)
canvas.pack(expand=1, fill='both')
x1, x2 = 50, 100
y1, y2 = 50, 100
oval = (x1, y1, x2, y2)
oval_id = canvas.create_oval(oval)
canvas.bind_all('<w>', move)
m.mainloop()