首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在matplotlib图形窗口中轻松修改导航工具栏?

如何在matplotlib图形窗口中轻松修改导航工具栏?
EN

Stack Overflow用户
提问于 2012-10-02 18:00:19
回答 6查看 36.3K关注 0票数 18

是否可以执行以下操作来修改matplotlib中的导航工具栏?

  1. 生成一个图形窗口,使用:fig = figure()
  2. 获取导航工具栏的引用,使用:tbar = fig.get_navigation_toolbar(),或者更好的是,只需:tbar = fig.navtbar
  3. 通过引用tbar修改工具栏,例如删除/添加/编辑按钮,如下所示: tbar.add_button(<a Button object>); tbar.remove_button(a reference to a button); tbar.edit_button(a reference to a button);

  1. 用:fig.canvas.draw()更新图

非常感谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-03-21 14:01:34

我发现删除不需要的工具栏项的方法是创建一个子类,该子类被实例化并在GTK应用程序中使用。当我手动创建图形、FigureCanvas和NavigationToolbar对象时,这是最简单的方法。

代码语言:javascript
复制
class NavigationToolbar(NavigationToolbar2GTKAgg):
    # only display the buttons we need
    toolitems = [t for t in NavigationToolbar2GTKAgg.toolitems if
                 t[0] in ('Home', 'Pan', 'Zoom', 'Save')]

如果要创建自定义按钮,应该查看NavigationToolbar2在backend_bases中的定义。您可以轻松地将自己的条目添加到toolitems列表中,并在工具栏子类中定义适当的回调函数。

票数 26
EN

Stack Overflow用户

发布于 2013-06-28 22:45:41

使用MPL1.2.1,可以通过figure.canvas.toolbar获得标准MPL图形的导航工具栏的处理程序。我不确定以前的版本。

至少在QT后端,可以使用QT方法.addWidget()向导航工具栏添加任意小部件。我想其他后端也会使用类似的方法,但我还没有对它们进行测试。

这里是一个工作示例(使用QT后端),它将一个QLineEdit()添加到导航工具栏中,以更改MPL图形的标题(使用run -i ...从IPython (pylab)运行,然后启动test()):

代码语言:javascript
复制
from PySide import QtGui, QtCore

def test():
    plot([1,2,3], lw=2)
    q = qt4_interface(gcf())
    return q   # WARNING: it's paramount to return the object otherwise, with 
               # no references, python deletes it and the GUI doesn't respond!

class qt4_interface:
    def __init__(self,fig):
        self.fig = fig

        toolbar = fig.canvas.toolbar
        self.line_edit = QtGui.QLineEdit()
        toolbar.addWidget(self.line_edit)
        self.line_edit.editingFinished.connect(self.do_something) 

    def do_something(self, *args):
        self.fig.axes[0].set_title(self.line_edit.text())
        self.fig.canvas.draw()
        #f = open('l','a'); f.write('yes\n'); f.flush(); f.close()
票数 7
EN

Stack Overflow用户

发布于 2015-02-18 13:40:45

以前的答案是有效的,但非常后端特定。一个轻巧、更优雅的解决方案是子类NavigationToolbar2,就像在另一个答案中所做的那样:Matplotlib/Tkinter - customizing toolbar tooltips在那里的目的是更改工具提示,但是添加或删除按钮同样是微不足道的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12695678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档