如何将点击事件绑定到 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 您根本不需要将焦点设置到框架。您将"<Button-1>"
事件与框架相关联,因此callback
只有在您单击框架区域时才会被调用,仅此而已。
另外,OP 要求在画布上绑定点击事件,而不是在框架上。如果你想让我删除反对票,你应该修改你的代码并通知我。
放置画布就像放置框架一样容易。
@MalikBrahimi 在这一点上,我想请你展示一个完整的例子来说明 OP 的要求,这意味着当他点击画布时,如果我理解良好,某些对象会移动到那个位置请求。以上是关于如何将点击事件绑定到 Tkinter 中的画布? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章