首页 > 解决方案 > Python pyplot:处理双击事件也捕获第一次单击事件

问题描述

我编写了一个代码来处理两者的不同事件 - 鼠标单击和双击。问题是,每次用户双击鼠标时,它也会触发单击,然后触发双击事件。

我希望双击只会触发一个事件!双击事件。

有什么建议么?

谢谢

标签: python-3.xmatplotlib

解决方案


正如@ThomasKühn 所链接的,答案是创建一个软件去抖动。有几种方法可以解决,解决方案可能取决于您的应用程序(您使用的是 GUI,什么后端等)为了尽可能不可知,我使用来自的一次性线程实现了我的解决方案线程模块

import threading
import matplotlib.pyplot as plt

DEBOUNCE_DUR = 0.25
t = None


def on_press(event):
    global t
    if t is None:
        t = threading.Timer(DEBOUNCE_DUR, on_singleclick, [event])
        t.start()
    if event.dblclick:
        t.cancel()
        on_dblclick(event)


def on_dblclick(event):
    global t
    print("You double-clicked", event.button, event.xdata, event.ydata)
    t = None


def on_singleclick(event):
    global t
    print("You single-clicked", event.button, event.xdata, event.ydata)
    t = None


fig, ax = plt.subplots()
cid = fig.canvas.mpl_connect('button_press_event', on_press)

plt.show()

推荐阅读