MEP23: GUI 창당 여러 그림 #

상태 번호

논의

브랜치 및 풀 리퀘스트 #

이전 작업 - https://github.com/matplotlib/matplotlib/pull/2465 삭제하려면

초록 #

동일한 아래에 여러 그림을 그룹화할 수 있는 가능성 추가 FigureManager

자세한 설명 #

현재 구조에서 모든 캔버스에는 자체 창이 있습니다.

이것은 대부분의 사용 사례에서 원하는 작업 방법이며 계속해서 그렇게 될 수 있습니다.

동시에 너무 많은 그림이 열려 있는 경우 같은 창에서 그룹화할 수 있는 것이 바람직합니다[참조]( https://github.com/matplotlib/matplotlib/issues/2194 ).

제안된 솔루션은 FigureManagerBase둘 이상의 Canvas. MultiFigure 동작이 필요한 경우 설정 매개변수 rcParams["backend.multifigure"]제어 .

메모

제안된 솔루션은 [MEP22]( https://github.com/matplotlib/matplotlib/wiki/Mep22 )가 이미 제자리 에 있다고 가정한다는 점에 유의해야 합니다 . 의 실제 구현으로 Toolbar인해 캔버스 간에 전환하기가 매우 어렵기 때문입니다.

구현 #

첫 번째 구현은 Notebook을 캔버스 컨테이너로 사용하여 GTK3에서 수행됩니다.

FigureManagerBase#

다음과 같은 새로운 방법을 추가합니다

  • add_canvas: 기존 FigureManager개체 에 캔버스를 추가하려면

  • remove_canvas: 오브젝트에서 캔버스를 제거하려면 FigureManager마지막 캔버스인 경우 파괴됩니다.

  • move_canvas: 캔버스를 한 캔버스에서 FigureManager 다른 캔버스로 이동합니다.

  • set_canvas_title: 특정 캔버스 컨테이너와 관련된 제목을 변경하려면

  • get_canvas_title: 특정 캔버스 컨테이너와 관련된 제목을 가져오려면

  • get_active_canvas: 전경에 있고 gui 이벤트가 적용되는 캔버스를 가져옵니다. 활성 캔버스가 개체 에서 호출 set_active_canvas 될 때 정의되기 때문에 없습니다 .showCanvas

new_figure_manager#

새 그림을 포함할 항목 을 제어하기 FigureManager위해 추가 선택적 매개변수인 figuremanager 가 추가되고 이 매개변수 값이 에 전달됩니다 new_figure_manager_given_figure.

new_figure_manager_given_figure#

  • figuremanager 매개변수가 주어지면 새 개체를 생성하는 대신 이 개체 FigureManager가 사용됩니다.

  • If rcParams['backend.multifigure']is True: FigureManager새 개체를 만드는 대신 마지막 개체가 사용됩니다.

이전 버전과의 호환성 #

MultiFigure 속성 이 표시되려면 사용자가 설정을 직접 활성화해야 합니다.rcParams['backend.multifigure'] = True

아직 MultiFigure 매직 FigureManagerBase을 구현하지 않았더라도 현재 구조를 준수하는 백엔드에 대해 이전 버전과 호환되어야 합니다 .

대안 #

를 수정하는 대신 FigureManagerBase병렬 클래스를 추가하여 . 이것은 맞춤형 백엔드에 문제가 없음을 보증할 뿐만 아니라 코드를 더 크게 만들고 유지 관리할 항목을 더 많이 만듭니다.rcParams['backend.multifigure'] = True