холст tkinter - извлечь идентификатор объекта из события? - PullRequest
0 голосов
/ 17 февраля 2019

Есть ли способ извлечь идентификатор объекта холста из события?

Например, я хотел бы добавить элемент на холст и связать его - но если у меня несколько элементовиз них на моем холсте, я должен различать их.

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

У меня есть несколько очень «хакерских» способов обойти это (следить за мышью и просить у холста ближайший элемент к этой точке), но это не похоже на «лучший» способ.

Есть ли лучший способ?

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать функцию 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()

Краткое описание в Отслеживание действий мыши для многих объектов холста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...