MEP23:每个 GUI 窗口多个图形#
状态#
讨论
分支和 Pull requests#
之前的工作 - matplotlib/matplotlib#2465 要删除
摘要#
添加将多个图形分组在同一个 FigureManager 下的可能性
详细描述#
在当前结构下,每个画布都有自己的窗口.
这现在并且可能继续是大多数用例所需的运行方法.
有时,当同时打开太多图形时,希望能够将这些图形分组在同一个窗口下.请参阅 PR #2194 .
建议的解决方案修改了 FigureManagerBase 以包含和管理多个 Canvas . backend.multifigure rcParam 控制何时需要 MultiFigure 行为.
Note
重要的是要注意,所提出的解决方案假定 MEP22 已经到位.这仅仅是因为 Toolbar 的实际实现使得在画布之间切换非常困难.
实施#
第一个实现将在 GTK3 中完成,使用 Notebook 作为画布容器.
FigureManagerBase#
将添加以下新方法
add_canvas: 将画布添加到现有的FigureManager对象remove_canvas: 从FigureManager对象中删除画布,如果它是最后一个,它将被销毁move_canvas: 将画布从一个FigureManager移动到另一个.set_canvas_title: 更改与特定画布容器关联的标题get_canvas_title: 获取与特定画布容器关联的标题get_active_canvas: 获取位于前台并且受 gui 事件影响的画布.没有set_active_canvas,因为 active canvas 是在Canvas对象上调用show时定义的.
new_figure_manager#
为了控制哪个 FigureManager 将包含新的图形,将添加一个额外的可选参数 figuremanager,此参数值将传递给 new_figure_manager_given_figure .
new_figure_manager_given_figure#
如果给定 figuremanager 参数,将使用此
FigureManager对象,而不是创建一个新的对象.如果
rcParams['backend.multifigure']为 True:将使用最后一个FigureManager对象,而不是创建一个新的对象.
向后兼容性#
为了使 MultiFigure 属性可见,用户必须直接设置 rcParams['backend.multifigure'] = True 来激活它们.
即使后端没有实现 MultiFigure 功能,它也应该向后兼容那些遵守当前 FigureManagerBase 结构的后端.
替代方案#
可以添加一个并行的类来代替修改 FigureManagerBase ,该类处理 rcParams['backend.multifigure'] = True 的情况.这将保证自定义后端不会出现任何问题,但也会使代码更大,并且需要维护更多内容.