如何获取调用事件的小部件的ID(Tkinter)

时间:2012-10-29 01:40:44

标签: python tkinter

我在画布上绘制了这些矩形。它们都绑定到Button-1事件。我喜欢做的是设置一个变量,其id为调用该事件的小部件。这是我喜欢做的伪代码

def clicked(e): #event handler. Binds to rectangle objects
    selected_button = e.widgets.get_id()

P.S:虽然我只将事件处理程序绑定到那些矩形对象,但是当我将代码e.widget.destroy()放在该处理程序中时,画布也会被销毁。

1 个答案:

答案 0 :(得分:4)

执行摘要

由于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_closestfind_overlappingfind_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"等效