python tkinter bind for 2 widgets in one moment
Если 2-ух виджетов указатель мыши оставил то делать функцию
widget1 and widget2.bind("<Leave>", program)
Ответы (1 шт):
and так не работает. and - это логическая операция. Для аргументов булевого типа (True или False) возвращает True если оба аргумента True (или False, если один или оба аргумента False), для всех остальных объектов если один из объектов "ложный" (0, False, None, пустой список/tuple/словарь, обобщенно - если метод __bool__ объекта возвращает False) то возвращает его (первый из ложных аргументов, если они оба ложные, например результатом 0 and None будет 0), иначе возвращает второй объект.
Кроме того, у and более низкий приоритет, чем у вызова метода, поэтому сначала произойдет вызов метода bind у второго объекта, потом будет выполнена операция and между первым объектом и результатом вызова метода bind. bind ничего не возвращает, для Python это эквивалентно возврату None, так что результатом выполнения всей конструкции будет None. Но так как результат операции and потом никак не учитывается, то вся строка эквивалентна просто widget2.bind("<Leave>", program).
Как выполнить привязку к событию <Leave> обоих объектов - просто отдельно сделайте bind для первого виджета, потом отдельно для второго.
widget1.bind("<Leave>", program)
widget2.bind("<Leave>", program)
Если виджетов много, можно делать привязку через цикл (если вы используете нумерованные переменные, то вообще имеет смысл заменить отдельные переменные на список):
for w in [widget1, widget2]:
w.bind("<Leave>", program)
Либо, поместить все виджеты в один фрейм, и привязываться к событию <Leave> фрейма, а не каждого отдельного виджета.