Отключите автоматическое масштабирование при использовании панели инструментов навигации в виджете PyQt Matplotlib

#python #matplotlib #pyqt5

Вопрос:

Вот мой код:

 class MyPlotter:
    def __init__(self,PlotWidget,buffersize,PlotParam=None):
        # setup the plot here- empty data
        self.x_data=[datetime.now()]
        self.y_data=[0]
        self._plot_ref = None
        self.plot_len = len(self.x_data)
        self.buffer = buffersize
        self.plotwidget=PlotWidget
        if PlotParam is not None:
            self.plotwidget.canvas.ax.set_title(PlotParam["title"])
            self.plotwidget.canvas.ax.set_ylabel(PlotParam["ytitle"])


    def redraw(self,data):
        # update plot here
        self.x_data.append(data[0])
        self.y_data.append(data[1])
        self.plot_len  = 1
        if self._plot_ref is None:
            plot_refs = self.plotwidget.canvas.ax.plot_date(self.x_data, self.y_data, 'b-')
            # plot_refs2 = self.plotwidget.canvas.ax.plot_date(self.x_data, [1,1], 'r-')
            self._plot_ref = plot_refs[0]
            # self._plot_ref2=plot_refs2[0]


        else:
            self._plot_ref.set_data(self.x_data, self.y_data)
            # self._plot_ref2.set_data(self.x_data, 1)

        self.plotwidget.canvas.ax.relim()
        self.plotwidget.canvas.ax.autoscale()
        if self.plot_len >= self.buffer:
            self.plotwidget.canvas.ax.set_xlim(left=self.x_data[self.plot_len - self.buffer],
                                               right=self.x_data[self.plot_len - 1])
        self.plotwidget.canvas.draw()
```
 

И я называю это с помощью такого Qtimer:

 class MainWindow(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(self.__class__, self).__init__()
        self.setupUi(self)

        self.timeplt=Plotter.MyPlotter(self.plotWidget,100)#,PlotParam={"title":"Timeonly", "ytitle":"Time"})

        self.timer=QtCore.QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.updateplots)
        self.timer.start()
    def updateplots(self):
        self.timeplt.redraw([datetime.now(),np.random.randint(5)])

app=QApplication(sys.argv)
window=MainWindow()
window.show()
app.exec_()
 

При этом я не могу использовать панель навигации на графике, так как график продолжает автоматически масштабироваться при каждом обновлении графика. Поэтому мне нужен способ определить, когда активна панель навигации, а затем использовать ее для временного отключения автоматического масштабирования.