Mayavi: ventanas de escena tvtk en blanco/no responde

Creado en 27 jul. 2017  ·  15Comentarios  ·  Fuente: enthought/mayavi

import os
assert(os.environ['ETS_TOOLKIT'] == 'qt4')
from mayavi import mlab
mlab.test_plot3d()

genera una ventana de figura en blanco/que no responde
image

La información de mi sistema es:

Plataforma: Linux-4.4.0-87-generic-x86_64-with-debian-stretch-sid
Python: 2.7.13 |Continuum Analytics, Inc.| (predeterminado, 20 de diciembre de 2016, 23:09:15) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Ejecutable: /home/ktavabi/miniconda3/envs/py2.7/bin/python
CPU: x86_64: 24 núcleos
Memoria: 94,4 GB
mne: 0.15.dev0
numpy: 1.13.1 {lapack=mkl_intel_lp64, blas=mkl_intel_lp64}
espía: 0.19.1
matplotlib: 2.0.2
aprender: 0.18.2
nibabel: 2.1.0
Mayavi: 4.5.0
pycuda: 2017.1
skcuda: 0.5.1
pandas: 0.20.3

cc @Eric89GXL

Comentario más útil

Puedo confirmar con 5.9.4 la ventana no muestra nada en OSX, con:

pip install pyqt5 --upgrade --no-deps

Se actualiza a 5.10.1 y funciona.

Todos 15 comentarios

¿Configuró %gui qt ? Si se trata de Vanilla Python y no de IPython, deberá agregar un mlab.show() al final. La necesidad de configurar el kit de herramientas de interfaz gráfica de usuario se documenta al principio aquí: http://docs.enthought.com/mayavi/mayavi/mlab.html

Establecí las variables de entorno ETS_TOOLKIT=qt4 y QT_API=pyqt
Estoy siguiendo diferentes comportamientos:

(1) Con ipython

ipython --gui=qt
from mayavi import mlab

devoluciones

ValueError Traceback (última llamada más reciente)
en()
----> 1 de mayavi importar mlab

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/mlab.py en()
25
26 # Importaciones Mayavi
---> 27 de mayavi.tools.camera importar vista, alabeo, guiñada, cabeceo, movimiento
28 de mayavi.tools.figure figura de importación, clf, gcf, savefig,
29 dibujar, sync_camera, cerrar, captura de pantalla

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/camera.py en()
23 # No podemos usar gcf, ya que crea una importación circular en la gestión de cámaras
24# rutinas.
---> 25 de .engine_manager import get_engine
26
27

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/engine_manager.py en()
10
11 # Importaciones locales
---> 12 de mayavi.preferences.api importar preferencia_manager
13 del registro de importación mayavi.core.registry
14 del motor de importación mayavi.core.engine

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/api.py en()
2
3 # La instancia global de PreferenceManager
----> 4 de .preference_manager importar preferencia_manager
5 desde .bindings import set_scene_preferences, get_scene_preferences

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/preference_manager.py en()
27 de traits.etsconfig.api importar ETSConfig
28 de traits.api import HasTraits, Instancia
---> 29 de traitsui.api importar Ver, Grupo, Elemento
30 desde apptools.preferences.api import (ScopedPreferences, IPreferences,
31 PreferenciasAyuda)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/api.py en()
34
35 prueba:
---> 36 de .editors.api import ArrayEditor
37 excepto ImportError:
38 # ArrayEditor depende de numpy, así que ignórelo si numpy no está presente.

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/__init__.py en()
21
22 prueba:
---> 23 desde .api import ArrayEditor
24 excepto ImportError:
25 pase

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/api.py en()
22 de .button_editor importar ButtonEditor
23 de .check_list_editor importar CheckListEditor
---> 24 desde .code_editor importar CodeEditor
25 de .color_editor importar ColorEditor
26 de .compound_editor importar CompoundEditor

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py en()
34 #------------------------------------------------ -------------------------------
35
---> 36 clase ToolkitEditorFactory ( EditorFactory ):
37 """ Fábrica de editores para editores de código.
38 """

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py en ToolkitEditorFactory()
46
47 # Color de fondo para marcar líneas
---> 48 marca_color = Color( 0xECE9D8 )
49
50 # Rasgo de objeto que contiene la línea seleccionada actualmente (opcional)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traits/traits.pyc en __call__(self, args, * metadata)
520
521 def __call__ (auto, argumentos, * metadatos):
--> 522 return self.maker_function( argumentos , * metadatos )
523
524 clase TraitImportError (TraitFactory):

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traits/traits.pyc en color ( argumentos, * metadatos)
1234 de traitsui.toolkit_traits importar ColorTrait
1235
-> 1236 devuelve ColorTrait ( argumentos, * metadatos)
1237
1238 Color = fábrica de rasgos (color)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit_traits.pyc en ColorTrait( argumentos, * rasgos)
5
6 def ColorTrait ( argumentos, * rasgos ):
----> 7 regresar kit de herramientas().color_trait( argumentos , * rasgos )
8
9 def RGBColorTrait ( argumentos , * rasgos ):

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit.pyc en toolkit(*toolkits)
150 si ETSConfig.kit de herramientas:
151 # Si ya se configuró un conjunto de herramientas para ETSConfig, utilícelo:
--> 152 _kit de herramientas = _importar_kit de herramientas(ETSConfig.kit de herramientas)
153 volver _herramientas
154 más:

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit.pyc en _import_toolkit(nombre)
81
82 def _import_toolkit (nombre):
---> 83 return __import__( nombre, globales=globales(), nivel=1 ).kit de herramientas
84
85

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/qt4/__init__.py en()
16 # import pyface.qt antes de hacer cualquier otra cosa para que sipapi
17 # se puede configurar correctamente si es necesario
---> 18 importar pyface.qt
19
20 #------------------------------------------------ ----------------------------

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/pyface/qt/__init__.py en()
38
39 elif qt_api == 'pyqt':
---> 40 preparar_pyqt4()
41
42 elif qt_api != 'parte interna':

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/pyface/qt/__init__.py en prepare_pyqt4()
15 # Establecer API compatibles con PySide.
16 sorbo de importación
---> 17 sorbo.setapi('QDate', 2)
18 sip.setapi('QDateTime', 2)
19 sorbo.setapi('QString', 2)

ValueError: API 'QDate' ya se ha establecido en la versión 1

Hasta ahora, ni from pyface.qt import QtGui, QtCore ni la desactivación de QT_API resuelven esto.

(2) En una consola de python normal

from mayavi import mlab
mlab.test_plot3d()

¡obras!

(3) En una consola python Pycharm IDE

from mayavi import mlab
mlab.test_plot3d()
mlab.show()

Es necesario para que snippet funcione.

Entonces, en IPython, parece que IPython está configurando la versión en 2. ¿Puedes probar esto?

$ ipython

from mayavi import mlab
%gui qt
mlab.test_plot3d()

Tal vez esto establezca la API de QT en 2 antes de que IPython pueda establecerla en 1. Técnicamente y de acuerdo con los documentos de IPython aquí: http://ipython.readthedocs.io/en/stable/interactive/reference.html#pyqt -and- pyside esto no debería suceder, pero veamos.

Gracias @prabhuramachandran que hizo el truco... por ahora.

Sería bueno que la situación entre backends, enlaces y módulos de visualización no fuera tan fluida. Así que actualmente estoy tratando de adoptar una práctica de trabajo con entornos virtuales para proyectos que pretendo (o espero) congelar en un estado de trabajo. Dicho esto, en mi experiencia para cualquier actualización o instalación dada, por ejemplo, ipython o matplotlib, no hay garantía de que la pila de visualización permanezca intacta. Tal vez sea solo mi ingenuidad, pero debo admitir que paso mucho tiempo resolviendo problemas y arreglando cosas rotas 😞 Así que siempre tengo curiosidad por saber cómo los desarrolladores tienden a mantener su 'entorno' en funcionamiento.

FYI cc @kingjr @choldgraf @Eric89GXL

Así que siempre tengo curiosidad por saber cómo los desarrolladores tienden a mantener su 'entorno' en buen estado de funcionamiento.

@choldgraf -- ¡Jajaja!

@kambysese -- Bueno, nuestro propio código realmente no ha cambiado mucho. El problema es que hay pyside, pyqt, pyqt4, pyqt5, qtdate (y todo eso), wxPython (2, 3, ¡ahora 4!). Creo que deberíamos documentar esto cuidadosamente en alguna parte. ¿Tienes una sugerencia? ¿Estaría bien ponerlo aquí: http://docs.enthought.com/mayavi/mayavi/mlab.html ?

@prabhuramachandran ¿Por qué sucede esto ahora en OSX? independientemente de la magia %gui qt

screen shot 2018-04-25 at 11 05 30 am

Ni idea, las cosas me han ido bien. ¿Qué versión de PyQt5? PyQt5 no es tan estable como me gustaría, he tenido problemas extraños muy a menudo. PyQt5 (5.10.1) me funciona en OSX, pero falla en Windows, donde tuve que cambiar a 5.9.2.

Estoy usando PyQt 5.9.2

Interesante, solía funcionar para mí, pero la barra de herramientas flotaba por todos lados, la actualización a PyQt 5.10.1 me lo arregló. Sin embargo, obtendría una visualización funcional, solo la barra de herramientas estaba desordenada. Intente actualizar a PyQt5.10.1.

conda no está satisfecho con esa opción debido a las dependencias. Puedo intentarlo, pero estoy bastante seguro de que algo más se romperá.

He estado usando pip install PyQt5 .

nvmd 5.9.2 es la versión más alta disponible en el canal conda predeterminado.

Puedo confirmar con 5.9.4 la ventana no muestra nada en OSX, con:

pip install pyqt5 --upgrade --no-deps

Se actualiza a 5.10.1 y funciona.

@larsoner -- ¡gracias! Que dolor. No use 5.10.1 en Windows, especialmente en appveyor.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

stefanoborini picture stefanoborini  ·  11Comentarios

jan-janssen picture jan-janssen  ·  21Comentarios

rahulporuri picture rahulporuri  ·  3Comentarios

rpep picture rpep  ·  7Comentarios

anntzer picture anntzer  ·  7Comentarios