Как удалить кнопки панели инструментов из matplotlib - PullRequest
0 голосов
/ 21 апреля 2019

Я хочу удалить некоторые кнопки с панели инструментов графика (matplotlib).

Я видел, что есть некоторые старые решения:

Как легко изменить навигационную панель инструментов в окне рисунка matplotlib?

Но во всех ответах используются каркасы GUI (QT, TKinter).

Есть ли новое решение, которое не использует каркасы GUI?

enter image description here

1 Ответ

3 голосов
/ 21 апреля 2019

Вы можете сделать это, добавив следующие строки кода перед созданием объекта графика:

import matplotlib as mpl
mpl.rcParams['toolbar'] = 'None' 

Если вы хотите удалить некоторые кнопки выборочно, вам нужно переопределить переменную toolitems:

from matplotlib import backend_bases
# mpl.rcParams['toolbar'] = 'None'
backend_bases.NavigationToolbar2.toolitems = (
        ('Home', 'Reset original view', 'home', 'home'),
        ('Back', 'Back to  previous view', 'back', 'back'),
        ('Forward', 'Forward to next view', 'forward', 'forward'),
        (None, None, None, None),
        ('Zoom', 'Zoom to rectangle', 'zoom_to_rect', 'zoom'),
        (None, None, None, None),
        ('Save', 'Save the figure', 'filesave', 'save_figure'),
      )

Я удалил две строки из исходной переменной mpl.backend_bases.NavigationToolbar2.toolitems, которая обычно гласит:

toolitems = (
    ('Home', 'Reset original view', 'home', 'home'),
    ('Back', 'Back to  previous view', 'back', 'back'),
    ('Forward', 'Forward to next view', 'forward', 'forward'),
    (None, None, None, None),
    ('Pan', 'Pan axes with left mouse, zoom with right', 'move', 'pan'),
    ('Zoom', 'Zoom to rectangle', 'zoom_to_rect', 'zoom'),
    ('Subplots', 'Configure subplots', 'subplots', 'configure_subplots'),
    (None, None, None, None),
    ('Save', 'Save the figure', 'filesave', 'save_figure'),
  )

EDIT

Я понял, что он работает с бэкэндом 'TkAgg'. Для бэкэнда 'Qt5Agg' нам нужно сделать несколько дополнительных патчей для обезьян сразу после изменения toolitems. А именно:

if matplotlib.get_backend() == 'Qt5Agg':
    from matplotlib.backends.backend_qt5 import NavigationToolbar2QT
    def _update_buttons_checked(self):
        # sync button checkstates to match active mode (patched)
        if 'pan' in self._actions:
            self._actions['pan'].setChecked(self._active == 'PAN')
        if 'zoom' in self._actions:
            self._actions['zoom'].setChecked(self._active == 'ZOOM')
    NavigationToolbar2QT._update_buttons_checked = _update_buttons_checked
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...