简介
本教程将向你展示如何使用 matplotlib.backend_managers.ToolManager 修改工具栏、创建工具、添加工具以及移除工具。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
列出由 ToolManager 控制的所有工具
第一步是列出由 ToolManager 控制的所有工具。这可以通过创建一个名为 ListTools 的自定义工具来实现。ListTools 类继承自 ToolBase。ListTools 的 trigger() 方法会打印所有可用工具的名称、描述和快捷键映射。
class ListTools(ToolBase):
"""列出由 `ToolManager` 控制的所有工具。"""
default_keymap = 'm' ## 键盘快捷键
description = '列出工具'
def trigger(self, *args, **kwargs):
print('_' * 80)
fmt_tool = "{:12} {:45} {}".format
print(fmt_tool('名称 (id)', '工具描述', '快捷键映射'))
print('-' * 80)
tools = self.toolmanager.tools
for name in sorted(tools):
if not tools[name].description:
continue
keys = ', '.join(sorted(self.toolmanager.get_tool_keymap(name)))
print(fmt_tool(name, tools[name].description, keys))
print('_' * 80)
fmt_active_toggle = "{!s:12} {!s:45}".format
print("活动切换工具")
print(fmt_active_toggle("组", "活动状态"))
print('-' * 80)
for group, active in self.toolmanager.active_toggle.items():
print(fmt_active_toggle(group, active))
显示具有给定 gid 的线条
第二步是创建一个名为 GroupHideTool 的自定义工具。GroupHideTool 类继承自 ToolToggleBase。GroupHideTool 的 set_lines_visibility() 方法根据工具是启用还是禁用,将绘图上所有具有指定 gid 的线条的可见性设置为 True 或 False。
class GroupHideTool(ToolToggleBase):
"""显示具有给定 gid 的线条。"""
default_keymap = 'S'
description = '按 gid 显示'
default_toggled = True
def __init__(self, *args, gid, **kwargs):
self.gid = gid
super().__init__(*args, **kwargs)
def enable(self, *args):
self.set_lines_visibility(True)
def disable(self, *args):
self.set_lines_visibility(False)
def set_lines_visibility(self, state):
for ax in self.figure.get_axes():
for line in ax.get_lines():
if line.get_gid() == self.gid:
line.set_visible(state)
self.figure.canvas.draw()
添加自定义工具
第三步是添加我们在步骤 1 和步骤 2 中创建的自定义工具。这可以通过调用 ToolManager 的 add_tool() 方法来实现。我们将 ListTools 和 GroupHideTool 工具添加到 ToolManager 中。我们还将 Show 工具添加到使用 Toolbar 的 add_tool() 方法创建的 Toolbar 中。
fig.canvas.manager.toolmanager.add_tool('List', ListTools)
fig.canvas.manager.toolmanager.add_tool('Show', GroupHideTool, gid='mygroup')
fig.canvas.manager.toolbar.add_tool('Show', 'navigation', 1)
移除工具
第四步是从工具栏中移除“前进”按钮。我们可以通过调用 ToolManager 的 remove_tool() 方法来实现这一点。
fig.canvas.manager.toolmanager.remove_tool('forward')
总结
在本教程中,我们学习了如何使用 matplotlib.backend_managers.ToolManager 修改工具栏、创建自定义工具、添加工具以及移除工具。我们创建了一个名为 ListTools 的自定义工具,它列出了由 ToolManager 控制的所有工具。我们还创建了一个名为 GroupHideTool 的自定义工具,它根据工具是启用还是禁用,将绘图上所有具有指定 gid 的线条的可见性设置为 True 或 False。最后,我们将自定义工具添加到 ToolManager 中,将 Show 工具添加到工具栏中,并从工具栏中移除了“前进”按钮。