【发布时间】:2020-05-31 12:26:47
【问题描述】:
我有一个带有 button_press_event 和 pick_event 处理程序的简单交互式绘图:
fig, ax1 = plt.subplots()
line, = ax1.plot(x, y, picker=10)
def pick_handler(event):
print "Pick_handler called!"
if isinstance(event.artist, Line2D):
# do something
def click_handler(event):
if event.button == 1:
print "Click_handler called by left-click!"
fig.canvas.mpl_connect('pick_event', pick_handler)
if event.button == 3:
print "Click_handler called by right-click!"
# do something
fig.canvas.mpl_connect('button_press_event', click_handler)
plt.show()
所需的行为如下:仅当我在图中左键单击时,才应调用 pick_handler()。
给定代码的行为不符合预期,发生了几件奇怪的事情。
1) 当情节出现并且我第一次左键单击情节中的任意位置时,将调用click_handler() 并执行print "Click_handler called by left-click!",但不调用pick_handler();仅从第二次左键单击开始调用pick_handler()。
2) 当我在绘图中的任意位置进行第二次和任何进一步的左键单击时,click_handler() 首先调用pick_handler() 并且仅在执行print "Click_handler called by left-click!" 之后,但根据代码它应该是副反之亦然。
3) 当情节出现并且我的第一次单击是在情节中的任意位置单击鼠标右键时(aynwhere 意味着即使我右键单击某些Line2D 对象),代码也会正确运行——它只是调用@987654331 @ 并执行 print "Click_handler called by right-click!"。但是,如果我的第一次单击是左键单击绘图中的任意位置,而第二次单击是右键单击绘图中的某个 Line2D 对象,那么代码将调用 click_handler(),click_handler() 首先调用并完全执行pick_handler(),然后执行print "Click_handler called by right-click!",但根据代码,任何右键单击都不应调用pick_handler()。
是我的代码错误还是我对点击和选择处理程序的理解有误?
【问题讨论】:
标签: matplotlib handler interactive picker