Skip to main content
 首页 » 编程设计

python之如何从 matplotlib 中删除工具栏按钮

2025年05月04日17dyllove98

我想从绘图工具栏 (matplotlib) 中删除一些按钮。

我看到有一些老办法:

How to modify the navigation toolbar easily in a matplotlib figure window?

但所有答案都使用 GUI 框架(QT、TKinter)。

是否有不使用 GUI 框架的新解决方案?

请您参考如下方法:

您可以通过在创建绘图对象之前添加以下代码行来实现:

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'), 
  ) 

编辑

我已经意识到它适用于后端“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