我通过在python中创建自定义MplWidget来使用matplotlib画布和导航栏,如下所示:
from PyQt5.QtWidgets import QWidget, QVBoxLayout
from matplotlib.backends.backend_qt5agg import (FigureCanvasQTAgg as
FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
class MplWidget(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure())
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
self.setLayout(vertical_layout)
self.canvas.toolbar = NavigationToolbar(self.canvas, self)
self.layout().addWidget(self.canvas.toolbar)
self.layout().addWidget(self.canvas)
self.canvas.axes.grid(b=True, which='both', axis='both')
self.canvas.figure.set_tight_layout(True)
我想检测何时平移或缩放工具被切换。我发现:在matplotlib中,我如何捕获该事件"缩放工具"被选中了吗?根据这里的解决方案,我尝试了
self.canvas.toolbar.get_state()['_current_action']
或者仅仅是self.canvas.toolbar.get_state()
,但是我得到错误:
AttributeError: 'NavigationToolbar2QT' object has no attribute 'get_state'
查看当前正在使用的操作似乎是一个非常基本的功能,所以我确信有一个简单的解决方案,但我似乎找不到它。
中放大
我找到了两个解决方案,但我不知道它们是否适用于所有类型的后端(我不是这方面的专家)。
第一个是轴相关的:
ax.get_navigate_mode()
它返回'PAN', 'ZOOM'或None。
(链接到文档)
第二个是数字相关的:
fig.canvas.toolbar.mode
它返回"平移/缩放"缩放"或";"。
(链接到NavigationToolbar2对象的源代码)