1

我通过以下方式将一个键绑定到我的画布:

self.canvas.bind("<w>", lambda event: self.canvas.focus_set())

现在,当按下那个键时我该怎么做,它会调用一个特定的动作,比如在画布上向上移动一个对象?

4

2 回答 2

3

根据文档,您需要以下内容:

  1. 如果您还没有这样做,请在 self.canvas.bind() 的第一个参数中指定要绑定为模式的键。
  2. 第二个参数可以是 lambda 表达式、函数或类方法。

例子:

# 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.

更多信息:

于 2015-02-05T15:36:53.743 回答
1

每当您单击例如字母时,您都可以通过指定新坐标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()
于 2015-02-05T15:44:22.607 回答