MEP22: 툴바 재작성 #

상태 번호

진전

브랜치 및 풀 리퀘스트 #

이전 작업:

끌어오기 요청:

초록 #

이 MEP의 주요 목표는 사용자가 그림과 상호 작용하는 방식을 더 쉽게 수정(추가, 변경, 제거)하는 것입니다.

그림과의 사용자 상호 작용은 캔버스 및 도구 모음에 깊이 통합되어 있습니다. 수정을 하기가 극도로 어렵습니다.

이 MEP는 독립적인 액세스 및 재구성을 제공하기 위해 이 상호 작용을 도구 모음, 탐색 및 도구로 분리할 것을 제안합니다.

이 접근 방식을 사용하면 사용자 간에 도구를 더 쉽게 만들고 공유할 수 있습니다. Tool먼 미래 에는 가장 인기 있는 것을 주요 배포판에 추가할 수 있는 일종의 s용 마켓플레이스도 예상할 수 있습니다.

자세한 설명 #

툴바의 재구성은 복잡하며 대부분의 경우 사용자 지정 백엔드가 필요합니다.

사용자 지정 도구를 만들면 도구 모음이 방해를 받는 경우가 있습니다. 예를 들어 https://github.com/matplotlib/matplotlib/issues/2694 를 참조하세요 . 또한 바로 가기는 하드코딩되어 있으며 다시 쉽게 수정할 수 없습니다. https://github.com/matplotlib/matplotlib /이슈/2699

제안된 솔루션은 에서 작업을 수행 Toolbar하고 에서 바로 가기를 수행하는 것입니다 Canvas. 작업 및 바로 가기는 Tools 형식입니다.

새 클래스 는 및 Navigation의 이벤트 사이의 다리 역할을 하며 해당 이벤트를 적절한 로 리디렉션합니다 .CanvasToolbarTool

결국 사용자 상호 작용은 세 가지 클래스로 나뉩니다.

  • 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에서 이 모든 것을 구현할 필요가 없도록 하는 기회를 제공합니다. 일부 백엔드는 잠재적으로 잠시 동안 새로운 기능 없이 존재할 수 있습니다(그러나 언젠가는 수행되어야 함).]