У меня проблемы с импортом, совместимостью с 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)