Mayavi: fenêtres de scène tvtk vides/ne répondant pas

Créé le 27 juil. 2017  ·  15Commentaires  ·  Source: enthought/mayavi

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

génère une fenêtre de figure vide/qui ne répond pas
image

Mes informations système sont :

Plate-forme : Linux-4.4.0-87-generic-x86_64-with-debian-stretch-sid
Python : 2.7.13 |Continuum Analytics, Inc.| (par défaut, 20 décembre 2016, 23:09:15) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Exécutable : /home/ktavabi/miniconda3/envs/py2.7/bin/python
Processeur : x86_64 : 24 cœurs
Mémoire : 94,4 Go
mne : 0.15.dev0
numpy : 1.13.1 {lapack=mkl_intel_lp64, blas=mkl_intel_lp64}
scipy : 0.19.1
matplotlib : 2.0.2
sklearn : 0.18.2
nibabel : 2.1.0
Mayavi : 4.5.0
pycuda : 2017.1
version : 0.5.1
pandas : 0.20.3

cc @Eric89GXL

Commentaire le plus utile

Je peux confirmer avec 5.9.4 que la fenêtre ne montre rien sur OSX, avec :

pip install pyqt5 --upgrade --no-deps

Il passe à 5.10.1, il fonctionne.

Tous les 15 commentaires

Avez-vous défini %gui qt ? S'il s'agit de Python vanille et non d'IPython, vous devrez ajouter un mlab.show() à la fin. La nécessité de définir la boîte à outils de l'interface graphique est documentée au début ici : http://docs.enought.com/mayavi/mayavi/mlab.html

J'ai défini les variables d'environnement ETS_TOOLKIT=qt4 et QT_API=pyqt
J'obtiens les différents comportements suivants :

(1) Avec ipython

ipython --gui=qt
from mayavi import mlab

Retour

ValueError Traceback (appel le plus récent en dernier)
dans()
----> 1 de mayavi import mlab

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/mlab.py dans()
25
26 # Importations Mayavi
---> 27 de mayavi.tools.camera import view, roll, yaw, pitch, move
28 de mayavi.tools.figure figure d'importation, clf, gcf, savefig,
29 tirages, sync_camera, fermer, capture d'écran

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/camera.py dans()
23 # Nous ne pouvons pas utiliser gcf, car cela crée une importation circulaire dans la gestion des caméras
24 # routines.
---> 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 dans()
dix
11 # Importations locales
---> 12 de mayavi.preferences.api importer preferences_manager
13 du registre d'importation mayavi.core.registry
14 du moteur d'importation mayavi.core.engine

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/api.py dans()
2
3 # L'instance globale de PreferenceManager
----> 4 depuis .preference_manager importer preferences_manager
5 à partir de .bindings import set_scene_preferences, get_scene_preferences

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/preference_manager.py dans()
27 de traits.etsconfig.api importer ETSConfig
28 à partir de traits.api import HasTraits, Instance
---> 29 de traitsui.api import View, Group, Item
30 à partir de l'importation apptools.preferences.api (ScopedPreferences, IPreferences,
31 Préférences (assistant)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/api.py dans()
34
35 essaies :
---> 36 de .editors.api import ArrayEditor
37 sauf erreur d'importation :
38 # ArrayEditor dépend de numpy, donc ignorez si numpy n'est pas présent.

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/__init__.py in()
21
22 essaies :
---> 23 depuis .api import ArrayEditor
24 sauf ImportErreur :
25 passes

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py dans()
34 #------------------------------------------------------------ -------------------------------
35
---> 36 classes ToolkitEditorFactory ( EditorFactory ):
37 """ Editor factory pour les éditeurs de code.
38 """

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py dans ToolkitEditorFactory()
46
47 # Couleur de fond pour les lignes de marquage
---> 48 mark_color = Couleur( 0xECE9D8 )
49
50 # Trait d'objet contenant la ligne actuellement sélectionnée (optionnel)

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traits/traits.pyc in Color( args, * metadata)
1234 de traitsui.toolkit_traits import ColorTrait
1235
-> 1236 return ColorTrait( args, * metadata )
1237
1238 Couleur = TraitFactory( Couleur )

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit_traits.pyc in ColorTrait( args, * traits)
5
6 def ColorTrait ( args, * traits ):
----> 7 return toolkit().color_trait( args, * traits )
8
9 def RGBColorTrait ( args, * traits ):

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit.pyc in toolkit(*toolkits)
150 si ETSConfig.toolkit :
151 # Si une boîte à outils a déjà été définie pour ETSConfig, utilisez-la :
--> 152 _toolkit = _import_toolkit(ETSConfig.toolkit)
153 retour _boîte à outils
154 autre:

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit.pyc dans _import_toolkit(nom)
81
82 def _import_toolkit ( nom ):
---> 83 return __import__( name, globals=globals(), level=1 ).toolkit
84
85

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/qt4/__init__.py in()
16 # importez pyface.qt avant que quoi que ce soit d'autre ne soit fait pour que le sipapi
17 # peut être réglé correctement si nécessaire
---> 18 importer pyface.qt
19
20 #------------------------------------------------------------ -------------------------------------

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/pyface/qt/__init__.py in prepare_pyqt4()
15 # Définir les API compatibles PySide.
16 gorgée d'importation
---> 17 sip.setapi('QDate', 2)
18 sip.setapi('QDateTime', 2)
19 sip.setapi('QString', 2)

ValueError : l'API 'QDate' a déjà été définie sur la version 1

Jusqu'à présent, ni from pyface.qt import QtGui, QtCore ni la désactivation de QT_API ne résolvent ce problème.

(2) Dans une console python standard

from mayavi import mlab
mlab.test_plot3d()

œuvres!

(3) Dans une console python Pycharm IDE

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

Est nécessaire pour que l'extrait de code fonctionne.

Ainsi, sur IPython, il semble qu'IPython définit la version sur 2. Pouvez-vous essayer ceci :

$ ipython

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

Peut-être que cela définira l'API QT sur 2 avant qu'IPython ne puisse la définir sur 1. Techniquement et selon la documentation IPython ici : http://ipython.readthedocs.io/en/stable/interactive/reference.html#pyqt -et- pyside cela ne devrait pas arriver mais voyons voir.

Merci @prabhuramachandran qui a fait l'affaire... pour l'instant.

Ce serait bien si l'état des choses entre les backends, les liaisons et les modules de visualisation n'était pas si fluide. J'essaie donc actuellement d'adopter une pratique de travail avec des environnements virtuels pour des projets que j'ai l'intention (ou l'espoir) de geler dans un état de fonctionnement. Cela dit, d'après mon expérience, pour toute mise à jour ou installation donnée, par exemple ipython ou matplotlib, il n'y a aucune garantie que la pile de visualisation reste intacte. C'est peut-être juste ma naïveté, mais je dois admettre que je passe beaucoup de temps à dépanner et à réparer les choses cassées 😞 Je suis donc toujours curieux de savoir comment les développeurs ont tendance à maintenir leur "environnement" en état de marche.

Pour info cc @kingjr @choldgraf @Eric89GXL

Je suis donc toujours curieux d'entendre comment les développeurs ont tendance à maintenir leur "environnement" en bon état de fonctionnement.

@choldgraf -- LOL !

@kambysese - Eh bien, notre propre code n'a pas vraiment beaucoup changé. Le problème est qu'il y a pyside, pyqt, pyqt4, pyqt5, qtdate (et ainsi de suite), wxPython (2, 3, maintenant 4 !). Je pense que nous devrions simplement documenter cela soigneusement quelque part. Avez-vous une suggestion? Est-ce que le mettre ici : http://docs.enought.com/mayavi/mayavi/mlab.html serait OK ?

@prabhuramachandran Pourquoi cela se produit-il maintenant sur OSX ? indépendamment de la magie %gui qt

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

Aucune idée, les choses ont bien fonctionné pour moi. Quelle version de PyQt5 ? PyQt5 n'est pas aussi stable que je le souhaiterais, j'ai eu très souvent des problèmes étranges. PyQt5 (5.10.1) fonctionne pour moi sur OSX mais se bloque sur Windows où j'ai dû rétrograder vers 5.9.2.

J'utilise PyQt 5.9.2

Intéressant, cela fonctionnait pour moi, mais la barre d'outils flottait partout, la mise à niveau vers PyQt 5.10.1 l'a corrigé pour moi. Cependant, j'obtiendrais une visualisation fonctionnelle, seule la barre d'outils était foirée. Essayez de mettre à jour vers PyQt5.10.1.

conda n'est pas satisfait de cette option en raison de dépendances. Je peux essayer mais je suis sûr que quelque chose d'autre va casser.

J'utilise pip install PyQt5 .

nvmd 5.9.2 est la version la plus élevée disponible sur le canal conda par défaut.

Je peux confirmer avec 5.9.4 que la fenêtre ne montre rien sur OSX, avec :

pip install pyqt5 --upgrade --no-deps

Il passe à 5.10.1, il fonctionne.

@larsoner - merci ! Quelle douleur. N'utilisez pas 5.10.1 sur Windows, en particulier sur appveyor.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

PennyQ picture PennyQ  ·  4Commentaires

igamenovoer picture igamenovoer  ·  7Commentaires

Kekushke picture Kekushke  ·  9Commentaires

rahulporuri picture rahulporuri  ·  3Commentaires

indranilsinharoy picture indranilsinharoy  ·  9Commentaires