Matplotlib 工具管理器

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将向你展示如何使用 matplotlib.backend_managers.ToolManager 修改工具栏、创建工具、添加工具以及移除工具。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。

列出由 ToolManager 控制的所有工具

第一步是列出由 ToolManager 控制的所有工具。这可以通过创建一个名为 ListTools 的自定义工具来实现。ListTools 类继承自 ToolBaseListToolstrigger() 方法会打印所有可用工具的名称、描述和快捷键映射。

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 类继承自 ToolToggleBaseGroupHideToolset_lines_visibility() 方法根据工具是启用还是禁用,将绘图上所有具有指定 gid 的线条的可见性设置为 TrueFalse

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 中创建的自定义工具。这可以通过调用 ToolManageradd_tool() 方法来实现。我们将 ListToolsGroupHideTool 工具添加到 ToolManager 中。我们还将 Show 工具添加到使用 Toolbaradd_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)

移除工具

第四步是从工具栏中移除“前进”按钮。我们可以通过调用 ToolManagerremove_tool() 方法来实现这一点。

fig.canvas.manager.toolmanager.remove_tool('forward')

总结

在本教程中,我们学习了如何使用 matplotlib.backend_managers.ToolManager 修改工具栏、创建自定义工具、添加工具以及移除工具。我们创建了一个名为 ListTools 的自定义工具,它列出了由 ToolManager 控制的所有工具。我们还创建了一个名为 GroupHideTool 的自定义工具,它根据工具是启用还是禁用,将绘图上所有具有指定 gid 的线条的可见性设置为 TrueFalse。最后,我们将自定义工具添加到 ToolManager 中,将 Show 工具添加到工具栏中,并从工具栏中移除了“前进”按钮。