可逆地断开matplotlib自己的按键处理

lnlaulya  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(114)

我试图暂时和可逆地断开matplotlib自己的按键事件,即键盘快捷键(“s”->保存,“q”->退出等)。
以前是这样做的:

fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)
# Do stuff
fig.canvas.manager.key_press_handler_id \
    = fig.canvas.mpl_connect('key_press_event', fig.canvas.manager.key_press)

但是,在最近的matplotlib版本中,fig.manager.key_press方法似乎已经不存在了。我现在如何暂时禁用matplotlib的事件处理?

kkbh8khc

kkbh8khc1#

根据@anntzer的回答here,可以连接到backend_bases.key_press_handler。因此,恢复以前行为的猴子补丁看起来像这样:

import matplotlib.pyplot as plt
from matplotlib import backend_bases

fig, ax = plt.subplots()

# monkey patch
fig.canvas.manager.key_press = backend_bases.key_press_handler

# disconnect
fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)

# do stuff
# [...]

# reconnect
fig.canvas.manager.key_press_handler_id \
    = fig.canvas.mpl_connect('key_press_event', fig.canvas.manager.key_press)

相关问题