Событие связывания Python 3 Tkinter распознает, какой элемент - PullRequest
0 голосов
/ 22 октября 2018

У меня есть два холста (элемента):

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 узнает, на какой холст она должна изменить цвет фона?

1 Ответ

0 голосов
/ 22 октября 2018

Объект события имеет атрибут 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):.

(* The canvas1=self.canvas1 необходим, только если вы связываете в цикле, как в Команда кнопки назначения Tkinter в цикле с лямбда )

...