1- Нет ли изящный способ сделать это назвать связанный метод, только если кнопка мыши была выпущена на моем виджетах; вне зависимости от ситуации нажав?
2- Не существует отличный способ сказать это реагировать только в случае полного нажмите (нажать и отпустить обе на одной и той же виджета)?
Нет «аккуратный» путь, потому что, как Tkinter-х docs говорят:
При нажатии кнопки мыши, над виджетом, Tkinter будет автоматически «захватить» указатель мыши , и события мыши будут тогда , отправленные текущему виджету, если удерживается нажатой кнопка мыши.
и оба ваши желания несовместимы с этой автоматической захватывая указателя мыши на пресс-вниз (который я не знаю, как отключить - я думаю, что это может быть невозможно отключить, но доказать отрицательное трудно;-).
Таким образом, вам нужно больше работы и не «опрятное» решение: при обратном вызове события кнопки-кнопки свяжите события ввода и опуска (привязанные методы экземпляра класса, в которых вы можете отслеживать, является ли мышь в настоящее время внутри или внутри интересующего виджета) этого окна, а также кнопки-релиза; таким образом, когда приходит событие релиза, вы знаете, следует ли выполнять «фактический обратный вызов приложения» (если внутри) или ничего не делать (если есть на улице) - это дает вам ваше желание номер 2, но описание этого как аккуратного будет растягиваться ,
Желание номер 1 еще сложнее, потому что вам нужно отслеживать ввод и оставлять события на интересующем виджет КАЖДЫЙ - недостаточно знать один бит, находится ли мышь внутри или снаружи, но вы должны отслеживать какой виджет (если таковой имеется) находится в данный момент, для правильного «фактического обратного вызова приложения» (если вообще) в момент отпускания кнопки.
В то время как внутренние не собираются быть аккуратным, каждая функция может быть связан в один аккуратный-to-вызов функции ... с немного «indaginous» внутренностей (термин, который используется чаще для обозначения корня работа канала или что-то подобное, а не программирование, но может быть уместным, когда вы хотите идти против зерен функциональности, жестко закодированной в рамках ... это недостаток фреймворков - вы в клевере, пока вы хотите вести себя так, как они поддерживают, но когда вы захотите победить свое обычное поведение, чтобы сделать что-то совершенно другое, что едва ли может быть «опрятным»!).
Я не думаю, что это довольно сложно, как вы заставляете его звучать. В вашем обратном вызове вы можете просто спросить Tkinter для виджета под курсором, а не отслеживать все события ввода и выхода. См. 'Winfo_containing'. –