Search code examples
pythonmatplotlibpyqtpyqt5qml

Integrating matplotlib in pyqt interface using matplotlib_backend_qtquick


I need to show some matplotlib.pyplot 3d graphics in my pyqt interface window. Trying to implement something like this with the help of library matplotlib_backend_qtquick.

Here is my main.py:

import os
import sys

from PyQt5 import QtQml, QtCore
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine
from matplotlib_backend_qtquick.backend_qtquickagg import FigureCanvasQtQuickAgg

os.environ['QT_QUICK_CONTROLS_STYLE'] = "Material"

QtQml.qmlRegisterType(FigureCanvasQtQuickAgg, "Backend", 1, 0, "FigureCanvas")

app = QApplication(sys.argv)

engine = QQmlApplicationEngine()

engine.load(QUrl.fromLocalFile('/home/vovi/PycharmProjects/pyqt5-qtquick2-example-master/pyqt5-qtquick2-example-master/pyqt5_qtquick2_example/qml/main.qml'))

if not engine.rootObjects():
    sys.exit(-1)

sys.exit(app.exec_())

When I'm trying to run my main.py I got a traceback:

Traceback (most recent call last):
  File "/home/vovi/PycharmProjects/pyqt5-qtquick2-example-master/pyqt5-qtquick2-example-master/main.py", line 10, in <module>
    from matplotlib_backend_qtquick.backend_qtquickagg import FigureCanvasQtQuickAgg
  File "/home/vovi/PycharmProjects/pyqt5-qtquick2-example-master/pyqt5-qtquick2-example-master/venv/lib/python3.11/site-packages/matplotlib_backend_qtquick/backend_qtquickagg.py", line 7, in <module>
    from .backend_qtquick import (
  File "/home/vovi/PycharmProjects/pyqt5-qtquick2-example-master/pyqt5-qtquick2-example-master/venv/lib/python3.11/site-packages/matplotlib_backend_qtquick/backend_qtquick.py", line 11, in <module>
    from matplotlib.backends.backend_qt5 import (
ImportError: cannot import name 'MODIFIER_KEYS' from 'matplotlib.backends.backend_qt5' (/home/vovi/PycharmProjects/pyqt5-qtquick2-example-master/pyqt5-qtquick2-example-master/venv/lib/python3.11/site-packages/matplotlib/backends/backend_qt5.py)

Process finished with exit code 1

What am I doing wrong?


Solution

  • That matplotlib_backend_qtquick library is not maintained anymore. It's broken now because at least it was using an internal symbol of an old Matplotlib version - MODIFIER_KEYS. The README says it worked with Matplotlib 3.2.1.

    So either use Matplotlib 3.2.1 version or port the library yourself.