MEP22: ツールバーの書き換え#
ステータス番号
進捗
ブランチとプルリクエスト#
以前の作品:
プルリクエスト:
NavigationToolbar クラスの削除 https://github.com/matplotlib/matplotlib/pull/2740 CLOSED
NavigationToolbar クラスを維持するhttps://github.com/matplotlib/matplotlib/pull/2759 CLOSED
イベントによるナビゲーション: https://github.com/matplotlib/matplotlib/pull/3652
アブストラクト#
この MEP の主な目的は、ユーザーが Figure を操作する方法を簡単に変更 (追加、変更、削除) できるようにすることです。
Figure に対するユーザーの操作は、キャンバスとツールバーに深く統合されています。変更を行うことは非常に困難です。
この MEP は、この対話をツールバー、ナビゲーション、およびツールに分離して、独立したアクセスと再構成を提供することを提案しています。
このアプローチにより、ツールの作成とユーザー間での共有が容易になります。Tool
遠い将来には、最も人気のあるものをメインのディストリビューションに追加できる一種の s のマーケットプレイスを予見することさえできます。
詳細な説明#
ツールバーの再構成は複雑で、ほとんどの場合、カスタム バックエンドが必要です。
カスタム ツールを作成すると、ツールバーに干渉することがあります。たとえば、https://github.com/matplotlib/matplotlib/issues/2694を参照してください。また、ショートカットはハードコードされており、簡単に変更できません https://github.com/matplotlib/matplotlib /issues/2699
提案された解決策は、 からアクションを取り出し、 からToolbar
ショートカットを取り出すことですCanvas
。アクションとショートカットは の形式になりますTool
。
新しいクラスは、とNavigation
からのイベント間のブリッジとなり、
それらを適切な にリダイレクトします。Canvas
Toolbar
Tool
最後に、ユーザー インタラクションは 3 つのクラスに分けられます。
NavigationBase: このクラスは FigureManager ごとにインスタンス化され、すべてのユーザー インタラクションをツールに接続します。
ToolbarBase: この既存のクラスは、ツールへの GUI アクセスとしてのみ格下げされています。
ToolBase: ツールの基本的な定義です。
実装#
ToolBase(オブジェクト) #
ツールは としてグラフィカルに表示されるSubplotTool
場合もあれば、ツールバーに表示されない場合もありますQuit
。
にToolBase
は、定義時に構成するための次のクラス属性があります。
keymap = None: ツールのトリガーに使用するキー
description = '': ツールの簡単な説明
image = None: ツールバーで使用される画像
次のインスタンス属性は、インスタンス化時に設定されます。
名前
ナビゲーション
メソッド#
trigger(self, event)
: これはツールのメイン メソッドであり、ツールが以下によってトリガーされたときに呼び出されます。ツールバーボタンのクリック
ツールキーマップに関連付けられたキープレス
navigation.trigger_tool(name) の呼び出し
set_figure(self, figure)
: 図形とナビゲーションの属性を設定しますdestroy(self, *args)
Tool
:グラフィカル インターフェイスを破棄します (存在する場合)。
利用可能なツール#
ツール終了
ToolEnableAllNavigation
ToolEnableNavigation
ツールトグルグリッド
ツールトグルフルスクリーン
ツール切り替え Y スケール
ツールトグル X スケール
ツールホーム
ツールバック
ツールフォワード
SaveFigureBase
ConfigureSubplotsBase
ToolToggleBase(ツールベース) #
にToolToggleBase
は、定義時に構成するための次のクラス属性があります。
radio_group = None: 「ラジオ」のようなツールをグループ化する属性 (相互に排他的)
cursor = None: ツールがアクティブなときに使用するカーソル
Toggleable Tools は、キープレス、マウスの動き、およびマウス ボタンの押下をキャプチャできます。
メソッド#
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
下位互換性#
下位互換性のために、rcParams["toolbar"]
(デフォルト: 'toolbar2'
) でサポートされる値のリストに「navigation」が追加されました。これNavigation
は、NavigationToolbar クラスの代わりにクラスのインスタンス化に使用されます。
このパラメーターを使用すると、既存のバックエンドを使用しているすべての人に対して透過的になります。
[@pelson コメント: これは、同じ PR でこれらすべてを実装する必要を回避する機会にもなります。一部のバックエンドは、新しい機能なしでしばらくの間存在する可能性があります (ただし、ある時点で実行する必要があります)。]