MEP23:每个图形用户界面窗口有多个图形¶
分支和请求¶
前期工作 -https://github.com/matplotlib/matplotlib/pull/2465 To-delete
详细描述¶
在当前结构下,每个画布都有自己的窗口。
对于大多数用例,这是并可能继续是所需的操作方法。
有时,当同时打开的数字太多时,最好能将这些数字分组在同一窗口下。 [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 . 这将保证定制后端不会有任何问题,但也会使代码更大,需要维护的东西更多。