Mayavi: janelas de cena tvtk em branco/sem resposta

Criado em 27 jul. 2017  ·  15Comentários  ·  Fonte: enthought/mayavi

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

gera janela de figura em branco/sem resposta
image

As informações do meu sistema são:

Plataforma: Linux-4.4.0-87-generic-x86_64-with-debian-stretch-sid
Python: 2.7.13 |Continuum Analytics, Inc.| (padrão, 20 de dezembro de 2016, 23:09:15) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Executável: /home/ktavabi/miniconda3/envs/py2.7/bin/python
CPU: x86_64: 24 núcleos
Memória: 94,4 GB
mne: 0.15.dev0
numpy: 1.13.1 {lapack=mkl_intel_lp64, blas=mkl_intel_lp64}
scip: 0.19.1
matplotlib: 2.0.2
sklearn: 0,18,2
nibabel: 2.1.0
mayavi: 4.5.0
picuda: 2017.1
skcuda: 0.5.1
pandas: 0,20,3

cc @Eric89GXL

Comentários muito úteis

Posso confirmar com 5.9.4 que a janela não mostra nada no OSX, com:

pip install pyqt5 --upgrade --no-deps

Ele atualiza para 5.10.1 funciona.

Todos 15 comentários

Você definiu %gui qt ? Se for Python Python e não IPython, você precisará adicionar um mlab.show() no final. A necessidade de definir o kit de ferramentas gui está documentada no início aqui: http://docs.enthought.com/mayavi/mayavi/mlab.html

Eu defino as variáveis ​​de ambiente ETS_TOOLKIT=qt4 e QT_API=pyqt
Estou conseguindo seguir comportamentos diferentes:

(1) Com ipython

ipython --gui=qt
from mayavi import mlab

retorna

ValueError Traceback (última chamada mais recente)
dentro()
----> 1 de mayavi import mlab

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/mlab.py em()
25
26 # Importações Mayavi
---> 27 de mayavi.tools.camera import view, roll, yaw, pitch, move
28 de mayavi.tools.figure import figure, clf, gcf, savefig,
29 desenhar, sync_camera, fechar, captura de tela

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/camera.py em()
23 # Não podemos usar o gcf, pois ele cria uma importação circular no gerenciamento de câmeras
24 # rotinas.
---> 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 em()
10
11 # Importações locais
---> 12 de mayavi.preferences.api importar preferência_manager
13 do registro de importação mayavi.core.registry
14 do motor de importação mayavi.core.engine

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/api.py em()
2
3 # A instância global do PreferenceManager
----> 4 de .preference_manager importar preferência_manager
5 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 em()
27 de traits.etsconfig.api importar ETSConfig
28 de traits.api import HasTraits, Instance
---> 29 from traitsui.api import View, Group, Item
30 da importação apptools.preferences.api (ScopedPreferences, IPreferences,
31 Preferências Helper)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/api.py em()
34
35 tente:
---> 36 de .editors.api import ArrayEditor
37 exceto ImportError:
38 # ArrayEditor depende de numpy, então ignore se numpy não estiver presente.

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/__init__.py em()
21
22 tente:
---> 23 de .api import ArrayEditor
24 exceto ImportError:
25 passes

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py em()
34 #------------------------------------------------ -------------------------------
35
---> 36 classes 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 em ToolkitEditorFactory()
46
47 # Cor de fundo para linhas de marcação
---> 48 mark_color = Color( 0xECE9D8 )
49
50 # Característica do objeto contendo a linha selecionada no momento (opcional)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traits/traits.pyc em __call__(self, args, * metadata)
520
521 def __call__ ( self, args, * metadados ):
--> 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 em Color( args, * metadata)
1234 de traitsui.toolkit_traits import ColorTrait
1235
-> 1236 return ColorTrait( args, * metadata )
1237
1238 Cor = TraitFactory( Cor )

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit_traits.pyc em 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 no toolkit(*toolkits)
150 se ETSConfig.toolkit:
151 # Se um kit de ferramentas já foi definido para ETSConfig, use-o:
--> 152 _toolkit = _import_toolkit(ETSConfig.toolkit)
153 return _kit de ferramentas
154 mais:

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/qt4/__init__.py em()
16 # importe pyface.qt antes que qualquer outra coisa seja feita para que o sipapi
17 # pode ser definido corretamente se necessário
---> 18 importar pyface.qt
19
20 #------------------------------------------------ ----------------------------

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/pyface/qt/__init__.py em()
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 em prepare_pyqt4()
15 # Definir APIs compatíveis com PySide.
16 goles de importação
---> 17 gole.setapi('QDate', 2)
18 gole.setapi('QDateTime', 2)
19 gole.setapi('QString', 2)

ValueError: API 'QDate' já foi definida para a versão 1

Até agora, nem from pyface.qt import QtGui, QtCore ou desarmar QT_API resolvem isso.

(2) Em um console python regular

from mayavi import mlab
mlab.test_plot3d()

trabalho!

(3) Em um console Python IDE do Pycharm

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

É necessário para o snippet funcionar.

Então, no IPython, parece que o IPython está configurando a versão para 2. Você pode tentar isso:

$ ipython

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

Talvez isso defina a API do QT como 2 antes que o IPython possa defini-lo como 1. Tecnicamente e de acordo com os documentos do IPython aqui: http://ipython.readthedocs.io/en/stable/interactive/reference.html#pyqt -and- pyside isso não deve acontecer, mas vamos ver.

Obrigado @prabhuramachandran que fez o truque... por enquanto.

Seria bom se o estado de coisas entre back-ends, ligações e módulos de visualização não fosse tão fluido. Portanto, estou atualmente tentando adotar uma prática de trabalho com envs virtuais para projetos que pretendo (ou espero) congelar em um estado de trabalho. Dito isso, na minha experiência, para qualquer atualização ou instalação, por exemplo, ipython ou matplotlib, não há garantia de que a pilha de visualização permaneça intacta. Talvez seja apenas minha ingenuidade, mas tenho que admitir que gasto muito tempo solucionando problemas e consertando coisas quebradas 😞 Então, estou sempre curioso para saber como os desenvolvedores tendem a manter seu 'ambiente' em ordem.

FYI cc @kingjr @choldgraf @Eric89GXL

Então, estou sempre curioso para saber como os desenvolvedores tendem a manter seu 'ambiente' em funcionamento.

@choldgraf -- LOL!

@kambysese -- Bem, nosso próprio código não mudou muito. O problema é que existe pyside, pyqt, pyqt4, pyqt5, qtdate (e outros enfeites), wxPython (2, 3, agora 4!). Acho que devemos documentar isso cuidadosamente em algum lugar. Você tem uma sugestão? Colocar aqui: http://docs.enthought.com/mayavi/mayavi/mlab.html estaria OK?

@prabhuramachandran Por que isso está acontecendo agora no OSX? independentemente da magia %gui qt

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

Não faço ideia, as coisas têm funcionado bem para mim. Qual versão do PyQt5? O PyQt5 não é tão estável quanto eu gostaria, tive problemas estranhos com muita frequência. O PyQt5 (5.10.1) funciona para mim no OSX, mas trava no Windows, onde precisei fazer o downgrade para 5.9.2.

Estou usando o PyQt 5.9.2

Interessante, costumava funcionar para mim, mas a barra de ferramentas flutuava por todo o lugar, atualizando para o PyQt 5.10.1 corrigiu para mim. No entanto, eu obteria uma visualização de trabalho, era apenas a barra de ferramentas que estava bagunçada. Tente atualizar para o PyQt5.10.1.

conda não está satisfeito com essa opção devido a dependências. Eu posso tentar, mas tenho certeza que algo mais vai quebrar.

Eu tenho usado pip install PyQt5 .

nvmd 5.9.2 é a versão mais alta disponível no canal conda padrão.

Posso confirmar com 5.9.4 que a janela não mostra nada no OSX, com:

pip install pyqt5 --upgrade --no-deps

Ele atualiza para 5.10.1 funciona.

@larsoner -- obrigado! Que dor. Não use 5.10.1 no Windows, especialmente no appveyor.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

relyativist picture relyativist  ·  16Comentários

rpep picture rpep  ·  7Comentários

dnacombo picture dnacombo  ·  7Comentários

rambalachandran picture rambalachandran  ·  9Comentários

indranilsinharoy picture indranilsinharoy  ·  9Comentários