1- Разве нет аккуратного способа сделать это
вызывать связанный метод, только если
кнопка мыши была отпущена на моем
виджет; не важно где это было
нажимается
2- Разве нет аккуратного способа сказать это
реагировать только в случае полного клика
(нажмите и отпустите оба
виджет)
Нет "аккуратного" способа, потому что, как говорит Ткинтер документы , говорят:
при нажатии кнопки мыши
через виджет, Tkinter будет
автоматически "схватить" мышь
указатель, и события мыши будут тогда
отправлено текущему виджету, пока
кнопка мыши удерживается нажатой.
и оба ваших желания несовместимы с этим автоматическим захватом указателя мыши при нажатии вниз (что я не знаю, как отключить - я думаю, что это невозможно отключить, но доказать отрицание сложно; -.)
Итак, вам нужно больше работы и не «аккуратное» решение: при обратном вызове события при нажатии кнопки привязать события ввода и выхода (к связанным методам экземпляра класса, где вы можете отследить, находится ли мышь в данный момент). внутри или внутри интересующего виджета) этого окна, а также кнопки-релиза; таким образом, когда наступает событие release, вы знаете, выполнять ли «реальный обратный вызов приложения» (если внутри) или ничего не делать (если снаружи) - это дает вам ваше желание номер 2, но описание этого как аккуратного было бы натяжкой .
Желание номер 1 еще сложнее, потому что вы должны отслеживать вход и выходить из событий на КАЖДОМ виджете интереса - недостаточно знать один бит, находится ли мышь внутри или снаружи, а вы должны отслеживать, какой виджет (если есть), в котором он находится в данный момент, для правильного (если вообще) направления «фактического обратного вызова приложения» во время отпускания кнопки.
Несмотря на то, что внутренности не будут аккуратными, каждую функциональность можно связать в одну аккуратную функцию вызова ... со слегка «неординарными» внутренностями (термин, который чаще используется для обратитесь к работе с корневым каналом или тому подобному, а не к программированию, но может быть уместным, если вы хотите пойти вразрез с функциональностью, жестко закодированной в платформе ... это обратная сторона платформ - вы в клевере до тех пор, пока вы хотите вести себя так, как они поддерживают, но когда вы хотите победить их обычное поведение, чтобы сделать что-то совершенно другое, это вряд ли когда-нибудь будет "изящным"! -).