我在画布上绘制了这些矩形集。它们都绑定到 Button-1 事件。我喜欢做的是设置一个带有调用事件的小部件 id 的变量。这是我喜欢做的伪代码
def clicked(e): #event handler. Binds to rectangle objects
selected_button = e.widgets.get_id()
PS:虽然我只将事件处理程序绑定到那些矩形对象,但当我将代码 e.widget.destroy() 放在该处理程序内时,画布也会被破坏。
由于 canvas 方法接受标签或项目 ID 的方式无关紧要,因此您可以使用紧凑回调
def autodestroy(event):
event.widget.delete("current")
您的回调接收 Tkinter事件作为唯一参数。此参数是一个对象,您可以从中检索受刺激的小部件以及其他信息(鼠标坐标或鼠标事件情况下的按钮)。
def clicked(event):
canvas = event.widget
要获取单击的画布项目,您可以使用CURRENT
1标记
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_
家庭返回元组,在某些情况下可能为空,您可能会测试为空或捕获异常。
然后要删除画布的一个项目,您可以使用canvas.delete
方法。
canvas.delete(rect)
由于 canvas 方法接受标签或项目 ID 的方式无关紧要,因此您可以使用更紧凑的编写方式:
def autodestroy(event):
event.widget.delete("current")
1 Tkinter.CURRENT
并且"current"
是等价的