是否可以执行以下操作来修改matplotlib中的导航工具栏?
fig = figure()tbar = fig.get_navigation_toolbar(),或者更好的是,只需:tbar = fig.navtbartbar修改工具栏,例如删除/添加/编辑按钮,如下所示:
tbar.add_button(<a Button object>);
tbar.remove_button(a reference to a button);
tbar.edit_button(a reference to a button);fig.canvas.draw()更新图非常感谢。
发布于 2013-03-21 14:01:34
我发现删除不需要的工具栏项的方法是创建一个子类,该子类被实例化并在GTK应用程序中使用。当我手动创建图形、FigureCanvas和NavigationToolbar对象时,这是最简单的方法。
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列表中,并在工具栏子类中定义适当的回调函数。
发布于 2013-06-28 22:45:41
使用MPL1.2.1,可以通过figure.canvas.toolbar获得标准MPL图形的导航工具栏的处理程序。我不确定以前的版本。
至少在QT后端,可以使用QT方法.addWidget()向导航工具栏添加任意小部件。我想其他后端也会使用类似的方法,但我还没有对它们进行测试。
这里是一个工作示例(使用QT后端),它将一个QLineEdit()添加到导航工具栏中,以更改MPL图形的标题(使用run -i ...从IPython (pylab)运行,然后启动test()):
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()发布于 2015-02-18 13:40:45
以前的答案是有效的,但非常后端特定。一个轻巧、更优雅的解决方案是子类NavigationToolbar2,就像在另一个答案中所做的那样:Matplotlib/Tkinter - customizing toolbar tooltips在那里的目的是更改工具提示,但是添加或删除按钮同样是微不足道的。
https://stackoverflow.com/questions/12695678
复制相似问题