如何通过事件修改 Tkinter Canvas 中的标签

How to modify tags in Tkinter Canvas by events

我正在以编程方式将 tag_binds 添加到我的 canvas 上具有标签 "tag":

的所有对象
self.canvas.tag_bind("tag","<Button 2>",self.tag_highlight)

self.canvas 包含用户添加的所有对象(全部标记为 "tag"。

但是,在 tag_highlight 中,我只想处理 canvas 中的实际元素。 event.widget 似乎没有帮助,它只是一个 4 个浮点数的元组,我不能 link 到任何 canvas 项目。我尝试使用以下方法,但无济于事:

self.canvas.find_closest(event.x,event.y)

我想做的是有一个像这样的句柄:

t=self.canvas.getitem(event.widget)

这样我就可以在以下地方使用它:

self.canvas.Move(t,30,20)
print self.canvas.coords(t)

等等。 也许我只是错过了显而易见的东西?

您可以使用标签 "current",它引用 "current" 对象。当前对象在official tk documentation中是这样描述的:

The tag current is managed automatically by Tk; it applies to the current item, which is the topmost item whose drawn area covers the position of the mouse cursor (different item types interpret this in varying ways; see the individual item type documentation for details). If the mouse is not in the canvas widget or is not over an item, then no item has the current tag.