我在导入、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 软件包安装 IS 时,运行基本的 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)
注意: 自定义 widget 插件与 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)
这适用于"导入错误:无法导入名称'QtOpenGL'">
sudo apt-get install python3-pyqt4.qtopengl
请参阅:刚刚安装了QtOpenGL,但无法导入(从Python)
python3-pyqt4.qtopengl
已折旧,新版本已python3-pyqt5.qtopengl
。
新命令:
sudo apt install python3-pyqt5.qtopengl