使用 matplotlib 的 mpl_connect
功能,可以将事件绑定(bind)到函数调用。但是,左右箭头键默认绑定(bind)为在图形历史记录中“后退”和“前进”。我想禁用此默认绑定(bind)。
例如:
import matplotlib.pyplot as plt
def on_key_press(event):
if event.key == "left":
print("Left!")
elif event.key == "right":
print("Right!")
plt.plot([0, 1, 2, 3, 4], [5, 2, 1, 2, 5])
plt.gcf().canvas.mpl_connect("key_press_event", on_key_press)
现在按左键将打印 Left!
到控制台。但是,当我们放大图形时,左键也会“返回”,然后缩小。 (右键将“前进”并向后放大。)我不希望这种情况发生 - 我该怎么做?让 on_key_press
返回 False
并不能解决问题。
(背景信息:我设置了绑定(bind),这样,当用户单击图形时,将出现一个光标,以标绘点为中心(由 [0,1,2,3,4] 和 [ 5,2,1,2,5]) 最接近用户点击的位置。我可以让左右键将光标移动到上一个/下一个数据点,但是如果用户恰好被放大,或者对图表进行了任何其他操作,事情就变糟了。)
最佳答案
删除所有默认键绑定(bind)
fig = plt.gcf()
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)
然而,当您需要手术刀时,这是在使用大锤。看着 handler function默认的键绑定(bind)是从 rcparams 中提取的,所以
import matplotlib as mpl
mpl.rcParams['keymap.back'].remove('left')
mpl.rcParams['keymap.forward'].remove('right')
将仅禁用 'left'
和 'right'
键。
那些 remove
调用可能应该包含在 try...except
中,因为如果值不在列表中(例如,您的用户已经重新 -映射它们)。可能值得遍历处理程序使用的所有 rcparams 以确保它们没有冲突。
关于python - 禁用 matplotlib 的默认箭头键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624183/