如何将点击事件绑定到 Tkinter 中的画布? [关闭]

Posted

技术标签:

【中文标题】如何将点击事件绑定到 Tkinter 中的画布? [关闭]【英文标题】:How to bind a click event to a Canvas in Tkinter? [closed] 【发布时间】:2015-05-26 12:49:17 【问题描述】:

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

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

【问题讨论】:

尝试here 阅读有关 Tkinter 事件的信息。 这个问题并不宽泛,应该重新提出。 (它可能是重复的,但这并不重要。我怀疑有人,或者更糟糕的是,某个程序看到了“想知道”这个词,并认为这个问题可能很广泛 【参考方案1】:

直接取自 Effbot tutorial 事件的示例。

在本例中,我们使用框架小部件的 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()

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

【讨论】:

为什么callback 函数需要focus_set() @MalikBrahimi 您根本不需要将焦点设置到框架。您将"&lt;Button-1&gt;" 事件与框架相关联,因此callback 只有在您单击框架区域时才会被调用,仅此而已。 另外,OP 要求在画布上绑定点击事件,而不是在框架上。如果你想让我删除反对票,你应该修改你的代码并通知我。 放置画布就像放置框架一样容易。 @MalikBrahimi 在这一点上,我想请你展示一个完整的例子来说明 OP 的要求,这意味着当他点击画布时,如果我理解良好,某些对象会移动到那个位置请求。

以上是关于如何将点击事件绑定到 Tkinter 中的画布? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何将回车键绑定到 tkinter 中的函数?

tkinter 中的 Python 3 unicode 编解码器错误绑定鼠标滚轮

如何将回车键绑定到tkinter中的函数?

python tkinter中的事件绑定

[Tkinter 教程15] event 事件绑定

tkinter:将鼠标滚轮绑定到滚动条