Hi Johannes!

Thanks for your reply!
Unfortunately the plt.show() does not show anything when called from the
processing plugin's "processAlgorithm()" function.
When called from the python console, it works fine instead.
I also detected that "fig.tight_layout()" stucks QGIS, when used in a
processing plugin.
But fortunately, in the meantime I've also detected, that  I can save the
whole plot to a PDF file by using "plt.savefig(pdf_name)".
And that's already a great benefit for me.

Best regards


Am Mi., 15. Feb. 2023 um 09:39 Uhr schrieb Johannes Kröger (WhereGroup) <
johannes.kroe...@wheregroup.com>:

> Hi Manfred,
>
> not what you asked but: Are you sure you need a second QMainWindow or
> maybe a non-modal QDialog or a QDockWidget would be sufficient? Those might
> be easier to use. Or maybe even just using the window that plt.show()
> creates?
>
> Cheers, Hannes
> Am 14.02.23 um 22:11 schrieb Manfred Strahlhofer via QGIS-User:
>
> Hello!
>
> There is a problem when using "matplotlib.backends" and drawing plots when
> called from a QGIS processing plugin. I am using the following test code:
> # sample code below draws a canvas with a plot
> # however closing this plot canvas crashes the plugin (cannot be restarted)
> # and further qgis can't be closed with the X button
> # originates from:
> https://matplotlib.org/stable/gallery/user_interfaces/embedding_in_qt_sgskip.html#sphx-glr-gallery-user-interfaces-embedding-in-qt-sgskip-py
> import sys
> import time
> import numpy as np
> from matplotlib.backends.qt_compat import QtWidgets
> from matplotlib.backends.backend_qtagg import (
>     FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
> from matplotlib.figure import Figure
> class ApplicationWindow(QtWidgets.QMainWindow):
>     def __init__(self):
>         super().__init__()
>         self._main = QtWidgets.QWidget()
>         self.setCentralWidget(self._main)
>         layout = QtWidgets.QVBoxLayout(self._main)
>         static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
>         # Ideally one would use self.addToolBar here, but it is slightly
>         # incompatible between PyQt6 and other bindings, so we just add
> the
>         # toolbar as a plain widget instead.
>         layout.addWidget(NavigationToolbar(static_canvas, self))
>         layout.addWidget(static_canvas)
>         dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))
>         layout.addWidget(dynamic_canvas)
>         layout.addWidget(NavigationToolbar(dynamic_canvas, self))
>         self._static_ax = static_canvas.figure.subplots()
>         t = np.linspace(0, 10, 501)
>         self._static_ax.plot(t, np.tan(t), ".")
>         self._dynamic_ax = dynamic_canvas.figure.subplots()
>         t = np.linspace(0, 10, 101)
>         # Set up a Line2D.
>         self._line, = self._dynamic_ax.plot(t, np.sin(t + time.time()))
>         self._timer = dynamic_canvas.new_timer(50)
>         self._timer.add_callback(self._update_canvas)
>         self._timer.start()
>     def _update_canvas(self):
>         t = np.linspace(0, 10, 101)
>         # Shift the sinusoid as a function of time.
>         self._line.set_data(t, np.sin(t + time.time()))
>         self._line.figure.canvas.draw()
> def test_plot():
>     # Check whether there is already a running QApplication (e.g., if
> running
>     # from an IDE).
>     #qapp = QtWidgets.QApplication.instance()   this stucks QGIS!
>     #if not qapp:
>     qapp = QtWidgets.QApplication(sys.argv) # this stucks QGIS main
> window when the dialog's close button is pressed
>     app = ApplicationWindow()
>     app.show()
>     app.activateWindow()
>     app.raise_()
>     qapp.exec()
>     #app.exit()
>
> When using "qapp = QtWidgets.QApplication.instance()", QGIS stucks
> completely and no plot is shown ever.
> When using "qapp = QtWidgets.QApplication(sys.argv)", the plot is shown
> and updated correctly. But when pressing the "close button" of the plot
> window, there are some strange effects (cannot start a plugin again) and
> the "close button" of the QGIS main window is disabled. Have to shut down
> qgis-bin.exe from the windows task-manager.
> I am using:
> QGIS Version 3.24.1 Tisler
> matplotlib 3.5.1
> Windows 10
>
> Anybody have a solution for this problem?
> Thanks a lot.
>
>
>
>
> _______________________________________________
> QGIS-User mailing listqgis-u...@lists.osgeo.org
> List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
> Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user
>
> --
> Johannes Kröger / GIS-Entwickler/-Berater
>
> **********************************************
> FOSSGIS Konferenz
> 15.-18. März 2023 in Berlinhttps://fossgis-konferenz.de/2023/
>
> WhereGroup-Beiträge auf der 
> FOSSGIShttps://wheregroup.com/unternehmen/aktuelles/
> **********************************************
>
> WhereGroup GmbH
> Grevenweg 89
> 20537 Hamburg
> Germany
>
> Tel: +49 (0)228 / 90 90 38 - 36
> Fax: +49 (0)228 / 90 90 38 - 11
> johannes.kroe...@wheregroup.comwww.wheregroup.com
> Geschäftsführer:
> Olaf Knopp, Peter Stamm
> Amtsgericht Bonn, HRB 9885
> -------------------------------
>
>
_______________________________________________
QGIS-User mailing list
QGIS-User@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to