Установка PyQt5 приводит к конструктору, qtopengl, возможно, к ошибкам pyqtgraph - PullRequest
0 голосов
/ 13 июня 2019

У меня проблемы с импортом, совместимостью с qtopengl, pyqtgraph и версией дизайнера.В зависимости от установки пакета, либо дизайнер не будет загружать пользовательские плагины с libQt5Core.so ImportError, либо GLViewWidgets завершится ошибкой с QtOpenGl ImportError.

Мой вопрос (ы):

  • Есть липроблема совместимости?
  • Проблема с версией?
  • Кто-нибудь раньше разрешал эти проблемы отдельно?Я не уверен, если или как они могут быть связаны.
  • Есть ли способ заставить обе ситуации работать одновременно?

Установка: (python3.6, ubuntu 18.04)

pip3 install --user pyqt5  # -> PyQt5-5.12.2
pip3 install --user pyqtgraph  # -> 0.10.0
apt-get install python3-pyqt5

Когда пакет pip3 pyqt5 НЕ установлен, дизайнер открывает и успешно загружает пользовательский плагин виджетов.Но выполнение базового pyqtgraph GLViewWidget приводит к:

from ..Qt import QtCore, QtGui, QtOpenGL, USE_PYQT5
ImportError: cannot import name 'QtOpenGL'

Когда установлен пакет pip3 pyqt5, запуск базового pyqtgraph GLViewWidget завершается успешно.Но дизайнеру не удается загрузить пользовательский плагин виджета с помощью:

from PyQt5 import QtWidgets, QtCore
ImportError: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12' not found (required by /home/USER/.local/lib/python3.6/site-packages/PyQt5/QtWidgets.so)

Примечание. Пользовательский плагин виджета совершенно не связан с GLViewWidget, а GLViewWidget совершенно не связан с дизайнером.GLViewWidget происходит от pyqtgraph, но ошибка только при импорте (пока), поэтому pyqtgraph, вероятно, не является источником проблемы.Далее мы поэкспериментируем с этим.


код, чтобы попробовать минимальный пример плагина дизайнера GLViewWidget

from pyqtgraph import opengl as gl, mkQApp  # fails here
app = mkQApp()
view = gl.GLViewWidget()
view.show()
app.exec()

(QVLabel_plugin.py)

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtDesigner import QPyDesignerCustomWidgetPlugin

class QVLabel(QtWidgets.QLabel):
    pass

class QVLabelPlugin(QPyDesignerCustomWidgetPlugin):
        def __init__(self, parent=None):
            QPyDesignerCustomWidgetPlugin.__init__(self)
            self.initialized = False
        def initialize(self, formEditor):
            if self.initialized:
                return
            self.initialized = True
        def isInitialized(self):
            return self.initialized
        def createWidget(self, parent):
            return QVLabel(parent=parent)
        def name(self):
            return "QVLabel"
        def group(self):
            return "Custom Widgets"
        def icon(self):
            return None  # will raise TypeError in designer, but everything should work fine
        def toolTip(self):
            return ''
        def whatsThis(self):
            return ''
        def isContainer(self):
            return True
        def includeFile(self):
            return "QVLabel_plugin"

при запуске дизайнера вкаталог QVLabel_plugin.py

PYQTDESIGNERPATH=. designer

Как происходит сбой GL:

from ..Qt import QtCore, QtGui, QtOpenGL, USE_PYQT5
ImportError: cannot import name 'QtOpenGL'

Как происходит сбой конструктора:

from PyQt5 import QtWidgets, QtCore
ImportError: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.12' not found (required by /home/USER/.local/lib/python3.6/site-packages/PyQt5/QtWidgets.so)
...