MEP23:每个图形用户界面窗口有多个图形

状态

Discussion

分支和请求

前期工作 -https://github.com/matplotlib/matplotlib/pull/2465 To-delete

摘要

添加将多个图形分组在同一个图形下的可能性 FigureManager

详细描述

在当前结构下,每个画布都有自己的窗口。

对于大多数用例,这是并可能继续是所需的操作方法。

有时,当同时打开的数字太多时,最好能将这些数字分组在同一窗口下。 [see] (https://github.com/matplotlib/matplotlib/issues/2194)。

建议的解决方案修改 FigureManagerBase 包含和管理多个 canvas . 设置参数 rcParams["backend.multifigure"] 控制何时 MultiFigure 行为是需要的。

Note

需要注意的是,建议的解决方案假定 [MEP22] (https://github.com/matplotlib/matplotlib/wiki/mep22)已经到位。这仅仅是因为 Toolbar 很难在画布之间切换。

实施

将在画布中使用kgt3实现。

FigureManagerBase

将添加以下新方法

  • add_canvas :将画布添加到现有的 FigureManager 对象
  • remove_canvas :从 FigureManager 对象,如果是最后一个对象,它将被销毁
  • move_canvas :移动画布 FigureManager 到另一个。
  • set_canvas_title :更改与特定画布容器关联的标题
  • get_canvas_title :获取与特定画布容器关联的标题
  • get_active_canvas :获取前景中受GUI事件影响的画布。没有 set_active_canvas 因为活动画布是在 show 在A上调用 Canvas 对象。

new_figure_manager

控制哪个 FigureManager 将包含新的数字,一个额外的可选参数 形象经理 将添加,此参数值将传递给 new_figure_manager_given_figure

new_figure_manager_given_figure

  • 如果 形象经理 参数给定时,此 FigureManager 将使用对象而不是创建新对象。
  • 如果 rcParams['backend.multifigure'] 是真的:最后 FigureManager 将使用对象而不是创建新对象。

向后兼容性

对于 MultiFigure 属性要可见,用户必须直接激活它们设置 rcParams['backend.multifigure'] = True

它应该是向后兼容的后端坚持电流 FigureManagerBase 结构,即使它们没有实现 MultiFigure 还没有魔法。

选择

而不是修改 FigureManagerBase 可以添加一个并行类来处理 rcParams['backend.multifigure'] = True . 这将保证定制后端不会有任何问题,但也会使代码更大,需要维护的东西更多。