23

我只是想知道是否有任何可能的方法可以使用 Tkinter 将点击事件绑定到画布。

我希望能够单击画布上的任意位置并将对象移动到它。我能够做出动作,但我还没有找到将点击绑定到画布的方法。

4

1 回答 1

36

直接取自 Effbot事件教程中的示例。

在此示例中,我们使用框架小部件的 bind 方法将回调函数绑定到名为 的事件。运行此程序并单击出现的窗口。每次单击时,控制台窗口都会打印一条消息,例如“在 44 63 处单击”。键盘事件被发送到当前拥有键盘焦点的小部件。您可以使用 focus_set 方法将焦点移动到小部件:

from Tkinter import *

root = Tk()

def key(event):
    print "pressed", repr(event.char)

def callback(event):
    print "clicked at", event.x, event.y

canvas= Canvas(root, width=100, height=100)
canvas.bind("<Key>", key)
canvas.bind("<Button-1>", callback)
canvas.pack()

root.mainloop()

更新:如果窗口/框架包含像具有键盘焦点的 Tkinter.Entry 小部件这样的小部件,则上面的示例不适用于“键”事件。放:

canvas.focus_set()

在“回调”函数中,将为画布小部件提供键盘焦点,并导致后续键盘事件调用“键”功能(直到其他一些小部件获得键盘焦点)。

于 2015-03-23T13:46:07.617 回答