'通过以下方式将密钥绑定到我的画布上:
self.canvas.bind("<w>", lambda event: self.canvas.focus_set())
现在,当按下该键时我该怎么做,它会调用一个特定的动作,比如在画布上移动一个对象?
答案 0 :(得分:1)
根据文档,您需要以下内容:
示例:
# 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.
更多信息:
答案 1 :(得分:1)
只要点击例如字母W
,就可以指定新的坐标。
Here您可以找到canvas对象支持的方法。有一个叫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()