OSX 中 skimage 的 Qt 问题

Posted

技术标签:

【中文标题】OSX 中 skimage 的 Qt 问题【英文标题】:Qt issues with skimage in OSX 【发布时间】:2017-09-30 22:50:43 【问题描述】:

我很难找到正确的步骤来让 skimage(以及它的 QT 组件)在 OSX 上运行。我将此示例用于 skimage:

import matplotlib
matplotlib.use('TkAgg')
from skimage import data
from skimage.viewer import ImageViewer

image = data.coins()
viewer = ImageViewer(image)
viewer.show()

哪个产生了这个错误:

/Users/marcleonard/.virtualenvs/marcleonard-zP9HSj98/lib/python3.4/site-packages/skimage/viewer/__init__.py:6: UserWarning: Viewer requires Qt
  warn('Viewer requires Qt')
Traceback (most recent call last):
  File "/Users/marcleonard/Desktop/image-api/image-api.py", line 7, in <module>
    viewer = ImageViewer(image)
  File "/Users/marcleonard/.virtualenvs/marcleonard-zP9HSj98/lib/python3.4/site-packages/skimage/viewer/viewers/core.py", line 93, in __init__
    init_qtapp()
  File "/Users/marcleonard/.virtualenvs/marcleonard-zP9HSj98/lib/python3.4/site-packages/skimage/viewer/utils/core.py", line 28, in init_qtapp
    QApp = QtWidgets.QApplication.instance()
AttributeError: 'QtGui_cls' object has no attribute 'QApplication'

为了安装 Qt,我使用了brew install python cmake qt(不过,大概这是 Qt5,也许这就是问题所在?)

我的 pipenv 图表如下所示:

scikit-image==0.13.1
  - matplotlib [required: >=1.3.1, installed: 2.0.2]
    - cycler [required: >=0.10, installed: 0.10.0]
      - six [required: Any, installed: 1.11.0]
    - numpy [required: >=1.7.1, installed: 1.13.3]
    - pyparsing [required: >=1.5.6,!=2.0.4,!=2.1.6,!=2.1.2, installed: 2.2.0]
    - python-dateutil [required: Any, installed: 2.6.1]
      - six [required: >=1.5, installed: 1.11.0]
    - pytz [required: Any, installed: 2017.2]
    - six [required: >=1.10, installed: 1.11.0]
  - networkx [required: >=1.8, installed: 2.0]
    - decorator [required: >=4.1.0, installed: 4.1.2]
  - pillow [required: >=2.1.0, installed: 4.2.1]
    - olefile [required: Any, installed: 0.44]
  - PyWavelets [required: >=0.4.0, installed: 0.5.2]
    - numpy [required: >=1.9.1, installed: 1.13.3]
  - scipy [required: >=0.17.0, installed: 0.19.1]
    - numpy [required: >=1.8.2, installed: 1.13.3]
  - six [required: >=1.7.3, installed: 1.11.0]

有什么想法可能是错的吗?

【问题讨论】:

【参考方案1】:

我通过使用 pip3 安装 PyQt4 解决了同样的问题:

sudo pip3 install PyQt4

在 PyCharm 2017.3.4 中,直到我更改了解释器设置,这些更改才被应用:

设置 -> 项目: -> 项目解释器 -> 安装 (+) -> 可用包 -> PyQt4 -> 安装包

PyQt4 需要 Python 3.4。 PyQt5 可以与较新版本的 Python 一起使用,但 PyQt5 的结构与其早期版本不同。 PyQt4 的 QtGui 模块已拆分为 PyQt5 的 QtGuiQtPrintSupportQtWidgets 模块。 ImageViewer 依赖于已移动到另一个模块的 QFileDialog,并且无法与 PyQt5 一起正常工作。

【讨论】:

以上是关于OSX 中 skimage 的 Qt 问题的主要内容,如果未能解决你的问题,请参考以下文章

from skimage.viewer.qt.QtCore import Qt ImportError: No module named QtCore

OSX 上的 QT:托盘图标 - 图标 Dock 问题

如何在 OSX 中使用 QT 设置 OpenCV?

使用 macports 安装 opencv 并在 qt (osx) 中使用

QT OSX 调试失去目标

OSX 10.6 上的 Qt5