У меня есть два полотна (элемента):
self.canvas1
self.canvas2
Я хочу, чтобы они делали something() при наведении мыши парить на холст.
Итак, я подключаю его с помощью bind('<Enter>'):
self.canvas1.bind('<Enter>', something)
self.canvas2.bind('<Enter>', something)
В something() он попытается настроить холст на красный цвет фона, поэтому:
def something(event):
canvas.configure(background='red')
Сложная часть состоит в том, как функция something узнает, на какой холст предполагается изменить цвет фона?






Объект события имеет атрибут widget, который относится к виджету, сгенерировавшему событие. Вы могли бы это использовать.
event.widget.configure(background = "red")
Если по какой-либо причине вы не хотите этого делать, вы можете создать анонимную функцию, которая сохраняет закрытие переменной вашего виджета, а затем вы можете передать ее в качестве аргумента вашей функции напрямую.
self.canvas1.bind('<Enter>', lambda event: something(self.canvas1))
#or possibly*
self.canvas1.bind('<Enter>', lambda event, canvas1=self.canvas1: something(canvas1))
В этом случае вам придется изменить параметры вашей функции something на def something(widget):.
(* canvas1=self.canvas1 необходим только в том случае, если вы выполняете привязку в цикле, как в Tkinter назначает команду кнопки в цикле с лямбдой)
Первое решение
event.widget.configure(background = "red")намного лучше и идеально мне подходит. Мне просто оставалось ждать принять ответ остыть