Mayavi: tvtk-Szenenfenster leer/reagieren nicht

Erstellt am 27. Juli 2017  ·  15Kommentare  ·  Quelle: enthought/mayavi

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

erzeugt ein leeres/nicht reagierendes Abbildungsfenster
image

Meine Systeminfo ist:

Plattform: Linux-4.4.0-87-generic-x86_64-with-debian-stretch-sid
Python: 2.7.13 |Continuum Analytics, Inc.| (Standard, 20. Dezember 2016, 23:09:15) [GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
Ausführbare Datei: /home/ktavabi/miniconda3/envs/py2.7/bin/python
Prozessor: x86_64: 24 Kerne
Speicher: 94,4 GB
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
skcuda: 0.5.1
Pandas: 0.20.3

cc @Eric89GXL

Hilfreichster Kommentar

Ich kann mit 5.9.4 bestätigen, dass das Fenster unter OSX nichts anzeigt, mit:

pip install pyqt5 --upgrade --no-deps

Es aktualisiert auf 5.10.1, es funktioniert.

Alle 15 Kommentare

Hast du %gui qt eingestellt? Wenn dies Vanilla-Python und nicht IPython ist, müssen Sie am Ende ein mlab.show() hinzufügen. Die Notwendigkeit, das GUI-Toolkit einzustellen, ist am Anfang hier dokumentiert: http://docs.enthought.com/mayavi/mayavi/mlab.html

Ich setze die Umgebungsvariablen ETS_TOOLKIT=qt4 und QT_API=pyqt
Ich erhalte folgende unterschiedliche Verhaltensweisen:

(1) Mit Python

ipython --gui=qt
from mayavi import mlab

kehrt zurück

ValueError Traceback (letzter Aufruf zuletzt)
in()
----> 1 von mayavi import mlab

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/mlab.py in()
25
26 # Mayavi-Importe
---> 27 von mayavi.tools.camera Ansicht importieren, rollen, gieren, neigen, bewegen
28 aus mayavi.tools.figure Importfigur, CLF, GCF, Savefig,
29 Draw, sync_camera, schließen, Screenshot

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/camera.py in()
23 # Wir können gcf nicht verwenden, da es einen kreisförmigen Import in der Kameraverwaltung erzeugt
24 # Routinen.
---> 25 aus .engine_manager import get_engine
26
27

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/tools/engine_manager.py in()
10
11 # Lokale Importe
---> 12 aus mayavi.preferences.api import preferences_manager
13 aus der Importregistrierung mayavi.core.registry
14 von mayavi.core.engine Import-Engine

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/api.py in()
2
3 # Die globale PreferenceManager-Instanz
----> 4 aus .preference_manager import preferences_manager
5 aus .bindings import set_scene_preferences, get_scene_preferences

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/mayavi/preferences/preference_manager.py in()
27 aus traits.etsconfig.api importieren Sie ETSConfig
28 aus traits.api import HasTraits, Instanz
---> 29 aus traitsui.api import View, Group, Item
30 aus apptools.preferences.api importieren (ScopedPreferences, IPreferences,
31 EinstellungenHelper)

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/api.py in()
34
35 Versuch:
---> 36 aus .editors.api Import ArrayEditor
37 außer ImportError:
38 # ArrayEditor hängt von numpy ab, also ignorieren, wenn numpy nicht vorhanden ist.

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/__init__.py in()
21
22 Versuch:
---> 23 aus .api Import ArrayEditor
24 außer ImportError:
25 Pass

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py in()
34 #------------------------------------------------------------- -------------------------------
35
---> 36 Klasse ToolkitEditorFactory ( EditorFactory ):
37 """ Editor-Factory für Code-Editoren.
38 """

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/editors/code_editor.py in ToolkitEditorFactory()
46
47 # Hintergrundfarbe zum Markieren von Linien
---> 48 mark_color = Farbe ( 0xECE9D8 )
49
50 # Objektmerkmal, das die aktuell ausgewählte Zeile enthält (optional)

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

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traits/traits.pyc in Farbe ( Argumente, * Metadaten)
1234 aus traitsui.toolkit_traits importiert ColorTrait
1235
-> 1236 gibt ColorTrait zurück (Argumente , * Metadaten)
1237
1238 Farbe = TraitFactory( Farbe )

/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 im Toolkit(*Toolkits)
150 wenn ETSConfig.toolkit:
151 # Wenn bereits ein Toolkit für ETSConfig festgelegt wurde, dann verwenden Sie es:
--> 152 _toolkit = _import_toolkit(ETSConfig.toolkit)
153 gib _toolkit zurück
154 sonst:

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/traitsui/toolkit.pyc in _import_toolkit(name)
81
82 def _import_toolkit ( Name ):
---> 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 # importiere pyface.qt, bevor irgendetwas anderes getan wird, damit die sipapi
17 # kann bei Bedarf korrekt eingestellt werden
---> 18 importiere pyface.qt
19
20 #------------------------------------------------------------ ----------------------------

/home/ktavabi/miniconda3/envs/py2.7/lib/python2.7/site-packages/pyface/qt/__init__.py in()
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 # PySide-kompatible APIs festlegen.
16 Schluck importieren
---> 17 sip.setapi('QDate', 2)
18 sip.setapi('QDateTime', 2)
19 sip.setapi('QString', 2)

ValueError: API 'QDate' wurde bereits auf Version 1 gesetzt

Bisher löst weder from pyface.qt import QtGui, QtCore noch das Unsetting der QT_API dies.

(2) In einer normalen Python-Konsole

from mayavi import mlab
mlab.test_plot3d()

funktioniert!

(3) In einer Pycharm-IDE-Python-Konsole

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

Ist erforderlich, damit das Snippet funktioniert.

Auf IPython scheint es also, dass IPython die Version auf 2 setzt. Können Sie dies versuchen:

$ ipython

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

Vielleicht wird dadurch die QT-API auf 2 gesetzt, bevor IPython sie auf 1 setzen kann. Technisch und gemäß den IPython-Dokumenten hier: http://ipython.readthedocs.io/en/stable/interactive/reference.html#pyqt -und- pyside sollte dies nicht passieren, aber mal sehen.

Danke @prabhuramachandran , das hat es geschafft ... vorerst.

Es wäre schön, wenn der Zustand zwischen Backends, Bindungen und Visualisierungsmodulen nicht so fließend wäre. Daher versuche ich derzeit, eine Praxis der Arbeit mit virtuellen Umgebungen für Projekte zu übernehmen, die ich beabsichtige (oder hoffe), in einem funktionierenden Zustand einzufrieren. Das heißt, meiner Erfahrung nach gibt es für ein bestimmtes Update oder eine bestimmte Installation, z. B. ipython oder matplotlib, keine Garantie, dass der Visualisierungsstapel intakt bleibt. Vielleicht ist das nur meine Naivität, aber ich muss zugeben, dass ich viel Zeit damit verbringe, Fehler zu beheben und kaputte Dinge zu reparieren 😞 Daher bin ich immer neugierig zu hören, wie Entwickler dazu neigen, ihre „Umgebung“ in Ordnung zu halten.

FYI cc @kingjr @choldgraf @Eric89GXL

Deshalb bin ich immer neugierig zu hören, wie Entwickler dazu neigen, ihre „Umgebung“ in Ordnung zu halten.

@choldgraf - LOL!

@kambysese – Nun, unser eigener Code hat sich nicht wirklich verändert. Das Problem ist, dass es pyside, pyqt, pyqt4, pyqt5, qtdate (und so weiter), wxPython (2, 3, jetzt 4!) gibt. Ich denke, wir sollten das einfach irgendwo sorgfältig dokumentieren. Haben Sie einen Vorschlag? Wäre es in Ordnung, es hier zu platzieren: http://docs.enthought.com/mayavi/mayavi/mlab.html ?

@prabhuramachandran Warum passiert das jetzt auf OSX? unabhängig von %gui qt Magie

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

Keine Ahnung, bei mir hat es gut funktioniert. Welche Version von PyQt5? PyQt5 ist nicht so stabil, wie ich es gerne hätte, ich hatte sehr oft seltsame Probleme. PyQt5 (5.10.1) funktioniert für mich unter OSX, stürzt aber unter Windows ab, wo ich auf 5.9.2 herunterstufen musste.

Ich verwende PyQt 5.9.2

Interessant, früher hat es bei mir funktioniert, aber die Symbolleiste schwebte überall herum, ein Upgrade auf PyQt 5.10.1 hat es für mich behoben. Ich würde jedoch eine funktionierende Visualisierung erhalten, es war nur die Symbolleiste, die durcheinander gebracht wurde. Versuchen Sie, auf PyQt5.10.1 zu aktualisieren.

conda ist mit dieser Option aufgrund von Abhängigkeiten nicht zufrieden. Ich kann es versuchen, aber ich bin mir ziemlich sicher, dass etwas anderes kaputt gehen wird.

Ich habe pip install PyQt5 verwendet.

nvmd 5.9.2 ist die höchste Version, die auf dem Standard-Conda-Kanal verfügbar ist.

Ich kann mit 5.9.4 bestätigen, dass das Fenster unter OSX nichts anzeigt, mit:

pip install pyqt5 --upgrade --no-deps

Es aktualisiert auf 5.10.1, es funktioniert.

@larsoner - danke! Was für ein Schmerz. Verwenden Sie 5.10.1 nicht unter Windows, insbesondere nicht unter Appveyor.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

anntzer picture anntzer  ·  7Kommentare

jan-janssen picture jan-janssen  ·  21Kommentare

stefanoborini picture stefanoborini  ·  11Kommentare

Kekushke picture Kekushke  ·  9Kommentare

igamenovoer picture igamenovoer  ·  7Kommentare