Skip to main content
 首页 » 编程设计

python之如何在 Python Tkinter 中指定完全点击

2025年05月04日9rubylouvre

下面的 python 行将把方法“click”绑定(bind)到当用户按下鼠标按钮且指针位于小部件上时的事件;无论她松开按钮时指针在哪里。

self.bind('<Button-1>',self.click) 

如果我在代码中使用“ButtonRelease”而不是“Button”,似乎在按钮释放后在其上按下鼠标的小部件将调用方法“click”;无论你在哪里发布它。

1- 是否有一种巧妙的方法可以让它仅在我的小部件上松开鼠标按钮时调用绑定(bind)方法?无论按在哪里?

2- 难道没有巧妙的方法告诉它仅在完全单击(在同一小部件​​上同时按下和释放)时才使用react吗?

请您参考如下方法:

1- Isn't there a neat way to make it call the bound method only if the mouse button was released on my widget; no matter where it was pressed?

2- Isn't there neat way to tell it to react only in case of a full click (press and release both on the same widget)?

没有“整洁”的方式,因为,作为 Tkinter 的 docs说:

When you press down a mouse button over a widget, Tkinter will automatically "grab" the mouse pointer, and mouse events will then be sent to the current widget as long as the mouse button is held down.

并且您的两个愿望都与这种在按下时自动抓取鼠标指针不兼容(我不知道如何禁用它——我认为它可能无法禁用,但很难证明是否定的; -).

因此,您需要做更多的工作,以及一个非“整洁”的解决方案:在按钮按下事件的回调中,绑定(bind)进入和离开事件(绑定(bind)类实例的方法,您可以在其中跟踪鼠标当前是否处于在该窗口的内部或感兴趣的小部件内部)以及按钮释放;这样,当发布事件到来时,您就知道是执行“实际应用程序回调”(如果在内部)还是什么也不做(如果在外部)——这给了您想要的第 2 个,但是将其描述为简洁会有些牵强.

第 1 个愿望更难,因为您必须跟踪每个感兴趣的小部件上的进入和离开事件——仅仅知道一位是不够的,无论鼠标在内部还是外部,您必须跟踪哪一个它当前所在的小部件(如果有的话),以便在按钮释放时正确地(如果有的话)引导“实际应用程序回调”。

虽然内部结构不会很整洁,但每个功能都可以绑定(bind)到一个易于调用 的函数中……内部结构略显“古板”(一个更常用的术语指的是根管治疗等,而不是编程,但是当你想要反对框架中硬编码的功能时可能是合适的……这是框架的缺点——你在clover 只要你想以他们支持的方式行事,但当你想打败他们通常的行为来做一些完全不同的事情时,那几乎不可能是“整洁”的!-)。