MEP22: 툴바 재작성 #
상태 번호
진전
브랜치 및 풀 리퀘스트 #
이전 작업:
끌어오기 요청:
NavigationToolbar 클래스 제거 https://github.com/matplotlib/matplotlib/pull/2740 닫힘
NavigationToolbar 클래스 유지 https://github.com/matplotlib/matplotlib/pull/2759 CLOSED
초록 #
이 MEP의 주요 목표는 사용자가 그림과 상호 작용하는 방식을 더 쉽게 수정(추가, 변경, 제거)하는 것입니다.
그림과의 사용자 상호 작용은 캔버스 및 도구 모음에 깊이 통합되어 있습니다. 수정을 하기가 극도로 어렵습니다.
이 MEP는 독립적인 액세스 및 재구성을 제공하기 위해 이 상호 작용을 도구 모음, 탐색 및 도구로 분리할 것을 제안합니다.
이 접근 방식을 사용하면 사용자 간에 도구를 더 쉽게 만들고 공유할 수 있습니다. Tool
먼 미래 에는 가장 인기 있는 것을 주요 배포판에 추가할 수 있는 일종의 s용 마켓플레이스도 예상할 수 있습니다.
자세한 설명 #
툴바의 재구성은 복잡하며 대부분의 경우 사용자 지정 백엔드가 필요합니다.
사용자 지정 도구를 만들면 도구 모음이 방해를 받는 경우가 있습니다. 예를 들어 https://github.com/matplotlib/matplotlib/issues/2694 를 참조하세요 . 또한 바로 가기는 하드코딩되어 있으며 다시 쉽게 수정할 수 없습니다. https://github.com/matplotlib/matplotlib /이슈/2699
제안된 솔루션은 에서 작업을 수행 Toolbar
하고 에서 바로 가기를 수행하는 것입니다 Canvas
. 작업 및 바로 가기는 Tool
s 형식입니다.
새 클래스 는 및 Navigation
의 이벤트 사이의 다리 역할을 하며 해당 이벤트를
적절한 로 리디렉션합니다 .Canvas
Toolbar
Tool
결국 사용자 상호 작용은 세 가지 클래스로 나뉩니다.
NavigationBase: 이 클래스는 각 FigureManager에 대해 인스턴스화되며 모든 사용자 상호 작용을 도구와 연결합니다.
ToolbarBase: 이 기존 클래스는 도구에 대한 GUI 액세스로만 강등됩니다.
ToolBase: 도구의 기본 정의입니다.
구현 #
도구베이스(객체) #
도구는 로 그래픽으로 표시 SubplotTool
되거나 도구 모음에 로 표시되지 않을 수 있습니다 Quit
.
에는 ToolBase
정의 시 구성을 위한 다음과 같은 클래스 속성이 있습니다.
keymap = 없음: 도구를 트리거하는 데 사용할 키
description = '': 도구에 대한 간략한 설명
image = None: 툴바에서 사용되는 이미지
인스턴스화 시 다음 인스턴스 속성이 설정됩니다.
이름
항해
방법 #
trigger(self, event)
: 이것은 도구의 기본 메서드이며 도구가 다음에 의해 트리거될 때 호출됩니다.툴바 버튼 클릭
도구 키맵과 관련된 키 누르기
navigation.trigger_tool(name) 호출
set_figure(self, figure)
: 도형 및 내비게이션 속성 설정destroy(self, *args)
Tool
: 그래픽 인터페이스 파괴 (존재하는 경우)
사용 가능한 도구 #
도구 종료
도구EnableAllNavigation
ToolEnableNavigation
도구토글그리드
도구전환전체화면
도구토글Y스케일
도구토글X스케일
도구홈
툴백
도구 전달
SaveFigureBase
ConfigureSubplotsBase
ToolToggleBase(도구 베이스) #
에는 ToolToggleBase
정의 시 구성을 위한 다음과 같은 클래스 속성이 있습니다.
radio_group = None: 도구와 같은 '라디오' 그룹에 대한 속성(상호 배타적)
cursor = 없음: 도구가 활성화되었을 때 사용할 커서
전환 가능한 도구는 키 누르기, 마우스 이동 및 마우스 버튼 누름을 캡처할 수 있습니다.
방법 #
enable(self, event)
:ToolToggleBase.trigger
메소드 에 의해 호출됨disable(self, event)
: 도구가 토글되지 않을 때 호출됩니다.toggled
: 속성 True 또는 False
사용 가능한 도구 #
툴줌
툴팬
툴바 베이스 #
메서드(백엔드 구현용) #
add_toolitem(self, name, group, position, image, description, toggle)
: 도구 모음에 도구 항목을 추가합니다. 이 메소드는tool_added_event
(네비게이션에 의해 생성된) 콜백입니다.set_message(self, s)
: 도구 모음 또는 상태 표시줄에 메시지 표시toggle_toolitem(self, name)
: 이벤트 발생 없이 도구 항목을 토글합니다.remove_toolitem(self, name)
: 도구 항목을 제거합니다.Toolbar
이전 버전과의 호환성 #
이전 버전과의 호환성 을 위해 NavigationToolbar 클래스 대신 클래스 인스턴스화 에 사용되는 'navigation'이 지원되는 값 목록에 추가되었습니다 rcParams["toolbar"]
(기본값: 'toolbar2'
).Navigation
이 매개변수를 사용하면 기존 백엔드를 사용하는 모든 사용자에게 투명하게 표시됩니다.
[@pelson 의견: 이것은 또한 동일한 PR에서 이 모든 것을 구현할 필요가 없도록 하는 기회를 제공합니다. 일부 백엔드는 잠재적으로 잠시 동안 새로운 기능 없이 존재할 수 있습니다(그러나 언젠가는 수행되어야 함).]