Как привязать события к элементам Canvas? - PullRequest
24 голосов
/ 07 мая 2010

Если я использую холст для отображения данных и хочу, чтобы пользователь мог щелкать по различным элементам на холсте, чтобы получить больше информации или каким-либо образом взаимодействовать с ней, как лучше всего это сделать? это?

Поиск в Интернете Я могу найти информацию о том, как привязать события к тегам, но это кажется более косвенным, чем то, что я хочу. Я не хочу группировать элементы по тэгам, а имею специальные вызовы функций, когда пользователь щелкает определенные элементы на холсте.

1 Ответ

58 голосов
/ 07 мая 2010

Для взаимодействия с объектами, содержащимися в объекте Canvas, вам нужно использовать tag_bind (), который имеет следующий формат: tag_bind(item, event=None, callback, add=None)

Параметр элемента может быть тегом или идентификатором.

Вот пример, иллюстрирующий концепцию:

from tkinter import * 

def onObjectClick(event):                  
    print('Got object click', event.x, event.y)
    print(event.widget.find_closest(event.x, event.y))

root = Tk()
canv = Canvas(root, width=100, height=100)
obj1Id = canv.create_line(0, 30, 100, 30, width=5, tags="obj1Tag")
obj2Id = canv.create_text(50, 70, text='Click', tags='obj2Tag')

canv.tag_bind(obj1Id, '<ButtonPress-1>', onObjectClick)       
canv.tag_bind('obj2Tag', '<ButtonPress-1>', onObjectClick)   
print('obj1Id: ', obj1Id)
print('obj2Id: ', obj2Id)
canv.pack()
root.mainloop()
...