使用matplotlib的mpl_connect
功能,可以将事件绑定到函数调用。但是,左右箭头键默认绑定在图的历史记录中“后退”和“前进”。我想禁用此默认绑定。
例如:
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
并不起作用。
(背景信息:我设置了绑定,以便当用户点击图形时,将出现一个光标,以绘制点为中心(由[0,1,2,3,4]和[0]给出5,2,1,2,5])最接近用户点击的位置。我可以使左右键将此光标移动到上一个/下一个数据点,但如果用户恰好放大了,或者对图表做了任何其他操作,事情变坏了。)
答案 0 :(得分:4)
删除所有默认密钥绑定
fig = plt.gcf()
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)
然而,当你需要手术刀时,这是使用大锤。查看handler function默认键绑定是从rcparams中提取的,所以
import matplotlib as mpl
mpl.rcParams['keymap.back'].remove('left')
mpl.rcParams['keymap.forward'].remove('right')
将仅停用'left'
和'right'
键。
这些remove
调用应该包含在try...except
中,因为如果值不在列表中,它们将会引发(例如,您的用户已经重新映射它们)。可能值得循环处理程序使用的所有rcparams,以确保它们的 none 冲突。
答案 1 :(得分:0)
为了找到其他Key映射......
import matplotlib as mpl
for k,v in mpl.rcParams.items():
if -1 != k.find("keymap"):
print "rcParams[%s]=%s"%(k,v)