升级Matplotlib至3.6.0后触发ValueError:'home_event'非有效信号
Matplotlib 3.6.0升级后'home_event'报错解决方案
问题描述
升级Matplotlib至3.6.0版本后,代码运行抛出如下错误:
ValueError: 'home_event' is not a valid value for signal; supported values are 'resize_event', 'draw_event', 'key_press_event', 'key_release_event', 'button_press_event', 'button_release_event', 'scroll_event', 'motion_notify_event', 'pick_event', 'figure_enter_event', 'figure_leave_event', 'axes_enter_event', 'axes_leave_event', 'close_event'
问题出在这行代码:
self.figure.canvas.mpl_connect('home_event', self.on_home)
问题根源
Matplotlib 3.6.0版本对CallbackRegistry机制做了调整:绑定未知信号时会直接抛出错误。此前版本中,绑定不存在的信号不会触发报错,但3.6.0开始严格校验信号名称的有效性,而home_event并非官方支持的标准信号。
解决方案
- 替换信号逻辑:如果是要响应工具栏的"回到初始视图"操作,可通过监听工具栏按钮点击实现,示例代码:
# 获取工具栏对象 toolbar = self.figure.canvas.toolbar # 绑定home按钮点击后的自定义逻辑 original_home = toolbar.home def custom_home(): original_home() self.on_home() toolbar.home = custom_home - 降级版本:若暂时无法修改代码,可将Matplotlib降级至3.5.x稳定版本,执行命令:
pip install matplotlib==3.5.3
内容的提问来源于stack exchange,提问作者Aking
相关产品推荐
相关产品推荐

