MEP22: ツールバーの書き換え#

ステータス番号

進捗

ブランチとプルリクエスト#

以前の作品:

プルリクエスト:

アブストラクト#

この MEP の主な目的は、ユーザーが Figure を操作する方法を簡単に変更 (追加、変更、削除) できるようにすることです。

Figure に対するユーザーの操作は、キャンバスとツールバーに深く統合されています。変更を行うことは非常に困難です。

この MEP は、この対話をツールバー、ナビゲーション、およびツールに分離して、独立したアクセスと再構成を提供することを提案しています。

このアプローチにより、ツールの作成とユーザー間での共有が容易になります。Tool遠い将来には、最も人気のあるものをメインのディストリビューションに追加できる一種の s のマーケットプレイスを予見することさえできます。

詳細な説明#

ツールバーの再構成は複雑で、ほとんどの場合、カスタム バックエンドが必要です。

カスタム ツールを作成すると、ツールバーに干渉することがあります。たとえば、https://github.com/matplotlib/matplotlib/issues/2694を参照してください。また、ショートカットはハードコードされており、簡単に変更できません https://github.com/matplotlib/matplotlib /issues/2699

提案された解決策は、 からアクションを取り出し、 からToolbarショートカットを取り出すことですCanvas。アクションとショートカットは の形式になりますTool

新しいクラスは、とNavigationからのイベント間のブリッジとなり、 それらを適切な にリダイレクトします。CanvasToolbarTool

最後に、ユーザー インタラクションは 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 でこれらすべてを実装する必要を回避する機会にもなります。一部のバックエンドは、新しい機能なしでしばらくの間存在する可能性があります (ただし、ある時点で実行する必要があります)。]