Tkinter привязывает щелчки мыши к фрейму

Должно быть, я упускаю что-то очевидное, у меня есть два фрейма в моей программе Tkinter, каждый с кучей меток в виде сетки. Я хочу привязать щелчок мыши к одному из них, но не к другому. сейчас я использую

root.bind("<Button-1>", mouse_function)

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

schedule_frame.bind("<Button-1>", mouse_function)

будет работать, но тогда я нигде не получаю ответа.

Функция, которую я вызываю:

def mouse_function(event):
    y = event.widget.grid_info()['row']
    x = event.widget.grid_info()['column'] 
    widgets[(y, x)].configure(state="active")
    shiftSelection(y,x)

person Bob    schedule 16.11.2015    source источник
comment
Связано: Почему метод .bind() не работает с виджетом фрейма в Tkinter?   -  person Stevoisiak    schedule 26.04.2018


Ответы (1)


При привязке к корневому окну эта привязка применяется ко всем виджетам в этом корневом окне. Вот почему он сработал для любого кадра. Это стандартное поведение для tkinter.

Когда вы перемещаете привязку на фрейм, она перестает работать, потому что фрейм никогда не видел событие. Когда вы нажимаете на метку, именно метка видит привязку, а не рамку (если вы не щелкаете в пространстве между метками)

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

Третье решение включает изменение тегов привязки для меток. Подробный пример см. в этом ответе: https://stackoverflow.com/a/32771893/7432

person Bryan Oakley    schedule 16.11.2015
comment
Спасибо, эта часть сработала, но теперь я не могу заставить порядок работать должным образом, я создал новый вопрос для этого stackoverflow.com/questions/33780668/. - person Bob; 18.11.2015