执行摘要
由于canvas方法可以接受标签或项目ID,因此可以使用紧凑型回调
def autodestroy(event):
event.widget.delete("current")
细节
您的回调收到一个Tkinter事件作为唯一参数.此参数是一个对象,您可以从中检索受刺激的小部件以及其他信息(在发生鼠标事件的情况下,鼠标坐标或按钮).
def clicked(event):
canvas = event.widget
要获得单击的画布项目,可以使用CURRENT1标签
rect = canvas.find_withtag("current")[0]
或使用find_closest,find_overlapping,find_enclosed …(从effbot.org复制)重现选择
canvas = event.widget
x = canvas.canvasx(event.x)
y = canvas.canvasy(event.y)
rect = canvas.find_closest(x, y)[0]
请注意,find_ family返回元组,在某些情况下该元组可能为空,并且您可能会测试空度或捕获异常.
然后,要删除画布的项目,可以使用canvas.delete方法.
canvas.delete(rect)
由于canvas方法可以接受标签或项目ID,因此可以使用更紧凑的文字:
def autodestroy(event):
event.widget.delete("current")
1 Tkinter.CURRENT和“当前”是等效的