import matplotlib.pyplot as plt
def onclick(event):
print(event.button)
fig = plt.figure()
connection_id = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
使用此代码,问题是双击会击中
onclick()
处理程序三次 次。我猜它正在接收点击事件,以及额外的双击事件。
如何更改此行为,以便双击事件不会触发事件处理程序?或者,如何检测事件实例中的双击,以便忽略这种情况?
注意:
button_release_event
没有这个问题,但我想在button_press_event
上开火
当我有 matplotlib 版本 1.1rc 时,我无法捕获 dblclick 事件。 后来我写了matplotlib 1.2的代码就可以了
import matplotlib.pyplot as plt
fig = plt.figure()
def onclick(event):
if event.dblclick:
print event.button
connection_id = fig.canvas.mpl_connect('button_press_event', onclick)
plt.show()
我能够使用
检测到此案例from gtk.gdk import BUTTON_PRESS, _2BUTTON_PRESS. _3BUTTON_PRESS
注意:在双击和三次单击枚举类型上使用下划线的原因并不是它们受到_protected,而是为了避免不允许拥有以数字开头的属性的问题。您可以通过以下方式检查事件类型:
event.guiEvent.type
但是,我后来发现,如果您使用不同的后端,导入会导致异常(而且,我只有“GTKAgg”后端有这个问题)。所以现在我使用这样的构造:
from gtk.gdk import BUTTON_PRESS as singleclick
if plt.get_backend() == 'GTKAgg':
if hasattr(event, 'guiEvent') and event.guiEvent.type != singleclick:
# suppress double click event
return
如果有人有更干净的解决方案,请随时在此处添加。
我在使用 matplotlib 1.1 时遇到了同样的问题。 没有“dblclick”事件类型。于是我就自己实现了。我要求两次点击之间的时间间隔必须小于0.5秒,否则程序将不执行任何操作。用户可以根据自己的经验自行调整此设置。
import matplotlib.pyplot as plt
import time
fig = plt.figure()
one_click_trigger = False
time_first_click = 0
def mouseDoubleClick(event):
global one_click_trigger
global time_first_click
if one_click_trigger == False:
one_click_trigger = True
time_first_click = time.time()
return
else:
double_click_interval = time.time() - time_first_click
if double_click_interval > 0.5:
one_click_trigger = False
time_first_click = 0
return
print "Double click!"
fig.canvas.mpl_connect('button_press_event', mouseDoubleClick)
plt.show()