PyQt5安装导致designer、qtopengl、可能pyqtgraph错误

Posted

技术标签:

【中文标题】PyQt5安装导致designer、qtopengl、可能pyqtgraph错误【英文标题】:PyQt5 installation results in designer, qtopengl, possibly pyqtgraph errors 【发布时间】:2019-10-27 16:01:54 【问题描述】:

我在导入、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)

【问题讨论】:

只需安装 PyQt5 的版本:或 pip3 install --user pyqt5 或 apt-get install python3-pyqt5 因为您意识到提供 pip 的 PyQt5 版本与 apt-get 不同,所以您会看到版本冲突,恕我直言,同时卸载 python 并仅使用 apt-get 如果你使用apt-get然后执行apt-get install python-pyqt5.qtopengl安装QtOpenGL 我尝试只使用 pip 安装,但设计器甚至没有尝试加载插件(我之前甚至不知道 pip 方法甚至包括设计器)。使用 apt 方法,我的 IDE 甚至无法将 PyQt5 识别为已安装(没有代码完成或查找)。 不要使用 pip,ubuntu 提供了这些包。当您安装 pip 时,它将使用与操作系统提供的不同的二进制文件。正如您所指出的,卸载 pyqt5 并仅使用 apt-get 安装 你的 IDE 是什么?您确定您的 IDE 使用的是使用 apt-get 的 python 版本吗?如果是 pycharm,那么您必须将其配置为使用操作系统的 python,因为它通常配置为使用 virtualenv 【参考方案1】:

这适用于“ImportError: cannot import name 'QtOpenGL'”

sudo apt-get install python3-pyqt4.qtopengl

见:Just installed QtOpenGL but cannot import it (from Python)

【讨论】:

以上是关于PyQt5安装导致designer、qtopengl、可能pyqtgraph错误的主要内容,如果未能解决你的问题,请参考以下文章

在 windows 上安装 PyQt5 Designer

Pycharm安装PyQt5和pyqt5-tools从而使用Qt Designer

如何为 WINDOWS 10 安装 Qt Designer for PyQt5

Pycharm(2017.2 community)+PyQt5.7+Designer

解决PyQt5在安装后无法找到Designer.exe问题,两个位置可供参考

PyQt5 图形界面 - Qt Designer设置简体中文方法演示,Qt Designer字体设置,Qt Designer工具单独安装包获取,Qt Designer简体中文语言包获取