解决python3中pyqt5和mayavi不兼容问题

本文介绍了解决Mayavi在安装PyQt5后出现的RuntimeError问题的方法。通过安装Pyside并配置不同IDE(包括qtconsole、spyder及iep3.7)的环境变量,成功解决了Mayavi与PyQt5之间的API冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:

win10 64bit & Linux Mint 18.2
WinPython3.6.1,spyder,qtconsole
iep3.7

问题描述:

通过http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyside下载mayavi,pyqt4,vtk等包安装后执行mayavi代码不会出现问题,突然想学pyqt5,就
pip3 install pyqt5
安装了,安装之后重新运行mayavi代码便会出错

错误提示:

RuntimeError: Invalid Qt API 'pyqt5', valid values are: 'pyqt' or 'pyside'

我在根据网上的答案操作的时候还出现了下面的错误,但是已经忘了错误是怎么来的了

>ImportError: Could not import backend for traits

Make sure that you have either the TraitsBackendWx or the TraitsBackendQt
projects installed. If you installed Mayavi with easy_install, try
easy_install <pkg_name>. easy_install Mayavi[app] will also work.

If you performed a source checkout, be sure to run 'python setup.py install'
in Traits, TraitsGUI, and the Traits backend of your choice.

Also make sure that either wxPython or PyQT is installed.
wxPython: http://www.wxpython.org/
PyQT: http://www.riverbankcomputing.co.uk/software/pyqt/intro

解决办法

下面我直说在qtconsole,spyder和iep3.7下成功解决的办法,
首先安装pyside,whl安装文件在上面链接下载安装完后将pysided目录添加到系统环境变量,比如我的在

D:\Applications\WinPython-64bit-3.6.1.0Zero\python-3.6.1.amd64\Lib\site-packages\PySide

(1)qtconsole

import os
os.environ['QT_API']='pyside'
%gui qt4

网上找到的一个答案是将QT_API修改成pyqt,但我自己试了不行,最后是使用pyside解决的
(2)spyder

在涉及到mayavi的代码中最开始添加

import os
os.environ['QT_API']='pyside'

添加完之后spyder运行还是会出错,要修改ipython的backend,设置那里把bakend修改成Tkinter,我试过修改成Qt4会出现ipython内核启动不了,如图
这里写图片描述
更简单的方法就是设置ipython启动那里,添加上面的代码,如下图,但是要注意迁移到其他平台下要稍作修改。
这里写图片描述
(3)iep3.7
每段代码前加入

import os
os.environ['QT_API']='pyside'

修改shell配置,将gui选择tk,如图
这里写图片描述


2017/08/10更新

在linux下也进行类似的操作,以linux mint18.2 为例,进入新立得软件管理器,搜索python3-pyside 进行安装,注意,如果直接pip3安装会提示

only these python versions are supported: [(2, 6), (2, 7), (3, 2), (3, 3), (3, 4)]

或者通过apt-get 安装

apt-get install python3-pyside

我在linux下也使用spyder,参照上面的配置即可.
每段代码前加入

import os
os.environ['QT_API']='pyside'

然后设置IPython的backend后端为Tkinter

### 在 PyQt5 中集成 Mayavi 实现数据可视化 为了在 PyQt5 应用程序中集成 Mayavi 进行数据可视化,通常会利用 `traitsui` `mayavi.mlab` 提供的功能来创建嵌入式的三维图形窗口。下面介绍一种常见的方式,在 PyQt5 的主界面中加入 Mayavi 可视化组件。 #### 创建 Qt 主应用程序框架并加载 Mayavi 场景 首先定义一个继承自 `QWidget` 或者其他合适部件类的新类作为应用的主要容器,并在这个新类里初始化 Mayavi 渲染场景: ```python from pyface.qt import QtGui, QtCore from mayavi.core.ui.api import MlabSceneModel from mayavi.tools.util import get_immediate_subclasses import numpy as np class MainWindow(QtGui.QMainWindow): def __init__(self): super(MainWindow, self).__init__() # 设置中心 widget 并设置布局管理器 central_widget = QtGui.QWidget() layout = QtGui.QVBoxLayout(central_widget) # 添加 Mayavi scene 到 layout container = QtGui.QWidget() layout.addWidget(container) # 初始化 Mayavi Scene Model self.scene = MlabSceneModel() # 构建 Mayavi 图形引擎实例并与当前的 QWidget 关联起来 from tvtk.pyface.ui.qt4.scene_editor import SceneEditor editor = SceneEditor(scene=self.scene) ui = editor.edit_traits(parent=container, kind=&#39;subpanel&#39;).control layout.addWidget(ui) self.setCentralWidget(central_widget) if __name__ == "__main__": app = QtGui.QApplication.instance() or QtGui.QApplication([]) window = MainWindow() window.show() # 测试绘制一些简单的 3D 数据点 x, y, z = np.random.random((3, 10)) window.scene.mlab.points3d(x, y, z) app.exec_() ``` 上述代码展示了如何在一个标准的 PyQt5 GUI 程序内引入 Mayavi 绘图功能[^2]。这里的关键在于使用了 `MlabSceneModel()` 来获取一个新的 Mayavi 场景区模型对象;接着通过 `tvtk.pyface.ui.qt4.SceneEditor` 类将此模型绑定至特定的小部件上显示出来。 需要注意的是,要使这段代码正常工作,计算机环境中应该已经正确安装好了必要的 Python 包,比如 PyQt5Mayavi、TVTK 等等。如果遇到依赖项缺失的情况,则可能需要按照提示信息调整环境配置或是解决潜在的兼容性问题[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值