是否可以从事件中提取画布对象的ID?
例如,我想将一个项目添加到画布上并绑定到它-但是,如果我在画布上有多个项目,则需要对其进行区分。
def add_canvas_item(self,x,y):
canvas_item_id = self.canvas.create_oval(x-50,y-50,x+50,y+50, fill='green')
self.canvas.tag_bind(canvas_item_id ,"<ButtonPress-1>",self.stateClicked)
def itemClicked(self,event):
print("Item XYZ Clicked!") <- Where XYZ is the ID of the item
我对此有一些非常“棘手的”方法(保持鼠标的轨迹,并向画布询问到该点最近的项目),但这似乎不是“最佳”的方法。
有更好的方法吗?
答案 0 :(得分:2)
您可以使用find_withtag()
函数来返回被单击的项目,如下例所示:
from tkinter import *
root = Tk()
canvas = Canvas(root)
canvas.pack()
def itemClicked(event):
canvas_item_id = event.widget.find_withtag('current')[0]
print('Item', canvas_item_id, 'Clicked!')
def add_canvas_item(x,y):
canvas_item_id = canvas.create_oval(x-50,y-50,x+50,y+50, fill='green')
canvas.tag_bind(canvas_item_id ,'<ButtonPress-1>', itemClicked)
add_canvas_item(100,100) # Test item 1
add_canvas_item(250,150) # Test item 2
root.mainloop()