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
答案 0 :(得分:11)
当我有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()
答案 1 :(得分:1)
我能够使用
检测到这种情况 from gtk.gdk import BUTTON_PRESS, _2BUTTON_PRESS. _3BUTTON_PRESS
注意: 双击和三击枚举类型下划线的原因并不是它们受到保护,而是避免了不允许有的问题以数字开头的属性。您可以使用以下方法检查事件类型:
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
如果有人有更清洁的解决方案,请随时在此处添加。
答案 2 :(得分:1)
我在使用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()