+-
python-如何获取调用事件的窗口小部件的ID(Tkinter)
我在画布上绘制了这些矩形集.它们都绑定到Button-1事件.我想做的是设置一个变量,该变量的ID为调用该事件的小部件的ID.这是我喜欢做的伪代码

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

P.S:尽管我仅将事件处理程序绑定到那些矩形对象,但是当我将代码e.widget.destroy()放入该处理程序时,画布也会被破坏.

最佳答案
执行摘要

由于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和“当前”是等效的

点击查看更多相关文章

转载注明原文:python-如何获取调用事件的窗口小部件的ID(Tkinter) - 乐贴网